为什么我的shell函数无法从管道输入更改目录?

问题描述 投票:1回答:1

我已经制作了一个cli来计算某个目录的位置,我真的希望让脚本改变它。我的第一种方法是./myscript | cd,我学到的不起作用1.cd不接受管道参数,2。不允许脚本更改父shell的目录。

我了解到有解决方法,我尝试在.bash_profile中创建一个函数:

function cdir(){
  DIR=""
  while read LINE; do
      DIR=$LINE
  done
  echo $DIR
  cd $DIR
}

现在运行./myscript | cdir输出正确的目录,但是,目录仍未更改。

使用命令替换工作:cd $(./myscript),但我真的更喜欢能够使用管道来编写它。你知道我怎么能让它工作,或者至少解释为什么它不可能?

bash cd
1个回答
3
投票

cd更改当前工作目录,这是该进程的属性。当您使用管道时,shell会创建一个子进程,当子进程完成时,cd(在您的函数内部)的效果会丢失。

cd -- "$(./myscript)"

这是正确的做法。在这里,cd在你当前的shell中运行。


也可以看看:

© www.soinside.com 2019 - 2024. All rights reserved.