如何在bash中为导出设置别名

时间:2011-10-12 23:14:42

标签: bash export alias

我正在尝试设置一个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. 感谢任何帮助。

由于

2 个答案:

答案 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'