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