函数中的bash-cd无法使用管道



我想通过定义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 $

bash函数在子shell中运行,并且在该过程中更改路径。这就是ls显示目录内容的原因。但是,当函数退出时,您会发现原来的shell仍在使用旧路径。有关详细信息,请参阅此问题。

你可以用一个别名:来完成你想要的事情

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

请确保使用单引号,如果使用双引号,则在定义别名时变量$path将被展开(为零(。

read将响应设置为一个变量,因此您的代码应该看起来像

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

之后你的代码会工作,我希望我帮助

最新更新