Bash 별칭의 변수가 예상대로 작동하지 않습니다.

Bash 별칭의 변수가 예상대로 작동하지 않습니다.

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")"'

관련 정보