Как псевдоним экспорта в Bash - PullRequest
3 голосов
/ 13 октября 2011

Я пытаюсь установить переменную env, которую я могу использовать для относительного изменения каталога. Я пытаюсь сделать это следующим образом, но не могу заставить его работать. Как мне это сделать?

alias sroot="export SROOT="$PWD""
alias drumit="cd $SROOT/abc/def/drumit"

Если я набираю sroot, он принимает псевдоним, но когда я набираю drumit, он выдает ошибку, говорящую

bash: cd: /abc/def/drumit: No such file or directory

Похоже, когда оболочка была запущена, она принимает $SROOT как . Цени любую помощь.

Спасибо

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

Ваши переменные $ PWD и $ SROOT расширяются во время определения псевдонимов, а не при их использовании. Поставьте \ перед ними, чтобы избежать их, пока они определены.

alias sroot="export SROOT="\$PWD""
alias drumit="cd \$SROOT/abc/def/drumit"
2 голосов
/ 13 октября 2011

Когда вы изначально устанавливаете псевдоним, он расширяется $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'
...