我想通过定义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
}
之后你的代码会工作,我希望我帮助