为什么我的shell函数不能通过管道输入更改目录?

时间:2017-10-01 17:53:11

标签: bash cd

我已经创建了一个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),但我真的更喜欢能够使用管道来编写它。你知道我怎么能让它工作,或者至少解释为什么不可能这样做?

1 个答案:

答案 0 :(得分:3)

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

cd -- "$(./myscript)"

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

另见: