子外壳未按预期工作的命令的'cd'别名



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

alias="cd $directory"

其中CCD_ 2来自使用输入。在另一个shell脚本中,我可以启动这样的子shell:

( bash )

这将我带到子shell,在那里,如果我运行cd,我将转到别名cd $directory。这是伟大的,它似乎正在发挥预期的作用。

我要找的是当子shell启动时,cd会自动发生,所以我尝试了:

( bash | cd )

以为它会启动子shell和cd给用户输入$directory,但它不起作用。我该如何着手让它发挥作用?我也尝试过( bash -c cd),但没有成功。

谢谢。

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

( cd ; bash )

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

顺便说一句;您确定要以这种方式创建cd作为别名吗?这似乎很容易出错,让我感到困惑。我认为最好创建一个外壳函数,cd指向用户指定的目录:

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

最新更新