我已经创建了一个cli来计算某个目录的位置,我真的希望将脚本更改为它。我的第一种方法是./myscript | cd
,我学到了它不起作用1. cd
不接受管道参数,2。不允许脚本更改父目录外壳
我了解到有变通方法,我尝试在.bash_profile
中创建一个函数:
function cdir(){
DIR=""
while read LINE; do
DIR=$LINE
done
echo $DIR
cd $DIR
}
现在正在运行./myscript | cdir
输出正确的目录,但目录仍未更改。
使用命令替换工作:cd $(./myscript)
,但我真的更喜欢能够使用管道来编写它。你知道我怎么能让它工作,或者至少解释为什么不可能这样做?
答案 0 :(得分:3)
cd
更改当前工作目录,该目录是流程的属性。当您使用管道时,shell会创建一个子进程,当子进程完成时,cd
(在您的函数内部)的效果会丢失。
cd -- "$(./myscript)"
是正确的做法。在这里,cd
在您当前的shell中运行。
另见: