我正在尝试设置一个env变量,我可以用它来做相对目录chanes。我试图通过以下方式实现,但无法让它工作。我该怎么做?
alias sroot="export SROOT="$PWD""
alias drumit="cd $SROOT/abc/def/drumit"
如果我输入sroot,它会占用别名但是当我输入drumit时,它会给我一个错误说
bash: cd: /abc/def/drumit: No such file or directory
看起来当shell被启用时,$SROOT
为.
感谢任何帮助。
由于
答案 0 :(得分:4)
您的$ PWD和$ SROOT变量在您定义别名时正在扩展,而不是在您使用它们时。在他们被定义时,在他们面前放一个\来逃脱他们。
alias sroot="export SROOT="\$PWD""
alias drumit="cd \$SROOT/abc/def/drumit"
答案 1 :(得分:2)
当您最初设置别名时,它会展开$PWD
而不是将其保留为变量形式。请尝试使用function
,如下所示:
$ function sroot {
> export SROOT="$PWD"
> }
$ export -f sroot
$ function drumit {
> cd $SROOT/cron
> }
$ export -f drumit
$ declare -f sroot
sroot()
{
export SROOT="$PWD"
}
$ declare -f drumit
drumit ()
{
cd $SROOT/abc/def/drumit
}
当你在问题(变量扩展)中使用别名时,这就是当前正在发生的事情:
$ alias sroot="export SROOT="$PWD""
$ alias drumit="cd $SROOT/abc/def/drumit"
$ alias
alias SROOT='/home/jon'
alias drumit='cd /home/jon/abc/def/drumit'
alias sroot='export SROOT=/home/jon'
逃避也会起作用:
$ alias sroot="export SROOT="\$PWD""
$ alias drumit="cd \$SROOT/abc/def/drumit"
$ alias
alias drumit='cd $SROOT/abc/def/drumit'
alias sroot='export SROOT=$PWD'