我刚学会了bash中的别名。我创建了一个这样的:
alias="cd $directory"
其中$directory
来自使用输入。在另一个shell脚本中,我可以像这样启动一个子shell:
( bash )
将我带到子shell,如果我运行cd
,我会转到别名cd $directory
。这很好,似乎按预期工作。
我正在寻找的是当子shell启动时,cd会自动发生,所以我尝试了:
( bash | cd )
认为它会启动子shell并cd到用户输入的$directory
,但它不起作用。我怎样才能让这个工作?我也试过( bash -c cd)
无济于事。
感谢。
答案 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 )