使用Subshel​​l的'cd'命令的别名不能按预期工作

时间:2012-03-20 02:27:21

标签: bash alias subshell

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

alias="cd $directory"

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

( bash )

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

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

( bash | cd )

认为它会启动子shell并cd到用户输入的$directory,但它不起作用。我怎样才能让这个工作?我也试过( bash -c cd)无济于事。

感谢。

1 个答案:

答案 0 :(得分:3)

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

( cd ; bash )

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

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

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

( cd_user ; bash )