我刚刚了解了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 )