source ~/.bashrc
エイリアスは、実行前またはsource ~/.bash_aliases
エイリアスを最初に実行した後にのみ正しく機能します。$todaydir
そうせずに文字列を適切に置き換えることができる魔法のような方法はありますか?
[myname@linux_server ~]$ cat .bash_aliases
alias col="todaydir=$(date | awk '{print $2$3}') ; cd /home/myname/collect/$todaydir"
[myname@linux_server ~]$ alias | grep today
alias col='todaydir=Feb24 ; cd /home/myname/collect/'
[myname@linux_server ~]$ source .bashrc
[myname@linux_server ~]$ alias | grep today
alias col='todaydir=Feb24 ; cd /home/myname/collect/'
[myname@linux_server ~]$ col
[myname@linux_server collect]$ alias | grep today
alias col='todaydir=Feb24 ; cd /home/myname/collect/'
[myname@linux_server collect]$ source ~/.bashrc
[myname@linux_server collect]$ alias | grep today
alias col='todaydir=Feb24 ; cd /home/myname/collect/Feb24'
[myname@linux_server collect]$ col
[myname@linux_server Feb24]$
[myname@linux_server ~]$ bash --version
bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
[myname@linux_server collect]$ cat ~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
export PATH=$PATH:~/bin
source ~/.bash_aliases
はい、はい、bashは古代です。私はルートではありません。
答え1
alias
コマンド置換は実行時ではなく定義時に評価されます。$todaydir
現在空の変数を評価する場合も同様です。これは、単一引用符ではなく二重引用符で別名を定義したためです。
これが意味するところです(他の日付形式を使用しています)。
$ alias col='todaydir=$(date | awk '\''{print $2$3}'\''); cd /home/myname/collect/$todaydir'
$ alias col
alias col='todaydir=$(date | awk '\''{print $2$3}'\''); cd /home/myname/collect/$todaydir'
$ col
-bash: cd: /home/myname/collect/25Feb: No such file or directory
awk
ただし、and変数は必要ありませんdate
。 and形式を使用してください。
alias col='cd /home/myname/collect/"$(date "+%b%d")"'