bash cd in 函数不适用于管道

我想通过定义一个 mycd 函数来将管道连接到 cd,期望像这样使用:echo workspace | mycd

这是我的函数的样子:

mycd(){
  read path
  cd $path && ls #The problem is (cd path) didn't get into the path,but (&& ls) is working good.
}

我下面的测试表明情况 1 无法更改路径,但情况 2 可以。

1.
~ $ echo workspace | mycd
~ $ 

2.
~ $ mycd
workspace
~/workspace $

shenwenxia715 回答:bash cd in 函数不适用于管道

一个 bash 函数在子 shell 中运行,并且路径在该过程中被更改。这就是 ls 显示目录内容的原因。 但是,当函数退出时,您会看到原始 shell 仍在使用旧路径。 有关详细信息,请参阅 this question

你可以用别名完成你想要的:

alias mycd='read path && cd "$path" && ls'
echo workspace | mycd
~/workspace $

确保使用单引号,当定义别名时,使用双引号,变量 $path 将被扩展(至无)。

,

read 将响应设置为变量,因此您的代码应如下所示

mycd(){
  read path
  cd "$path" && ls
}

在那之后您的代码将起作用,我希望我有所帮助

本文链接:https://www.f2er.com/340377.html

大家都在问