2

我刚刚了解了 bash 中的别名。我像这样创建了一个:

alias="cd $directory"

使用输入在哪里$directory。在另一个 shell 脚本中,我可以像这样启动一个子 shell:

( bash )

这将我带到子shell,如果我运行cd,我会转到别名,cd $directory. 这很棒,而且似乎按预期工作。

我正在寻找的是当 subshel​​l 启动时, cd 会自动发生,所以我尝试了:

( bash | cd )

认为它会启动 subshel​​l 和 cd 到用户输入$directory,但它不工作。我怎样才能让它发挥作用?我也试( bash -c cd)了也没用。

谢谢。

4

1 回答 1

3

( bash | cd )不起作用的原因是管道中的每个命令都在单独的子shell中运行,因此( bash | cd )基本上等同于( ( bash ) | ( cd ) )(当然,后者启动更多子shell)。相反,您应该能够编写:

( cd ; bash )

(在运行cd 之前运行bash)因为bash将继承启动它的子shell的执行环境的副本。

顺便问一下——您确定要以cd这种方式创建别名吗?这对我来说似乎很容易出错和困惑。cd我认为创建一个指向用户指定目录的 shell 函数会更好:

function cd_user () { cd "$directory" ; }

( cd_user ; bash )
于 2012-03-20T02:31:29.107 回答