函数中的bash cd不能使用管道
我希望通过定义一个mycd函数将管道连接到cd,除了这样使用:echo workspace | mycd 我的函数是这样的:函数中的bash cd不能使用管道,bash,shell,syntax,pipe,cd,Bash,Shell,Syntax,Pipe,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(){
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 $
read将响应设置为一个变量,所以您的代码应该如下所示
mycd(){
read path
cd "$path" && ls
}
在此之后,您的代码将正常工作,我希望我帮助在子shell中运行bash函数,并且在该过程中更改了路径。这就是为什么
ls
显示目录的内容。
但是,当函数退出时,您会看到原始shell仍在使用旧路径。
有关更多信息,请参阅
您可以使用别名完成所需的操作:
alias mycd='read path&&cd“$path”&&ls'
echo工作区| mycd
~/工作区$
请确保使用单引号,使用双引号时,定义别名时变量
$path
将展开(为零)。路径仅在运行函数的子shell中更改。您不能运行这样的shell命令并更改父shell。很抱歉,您错过了$right before路径,已经编辑了该问题。@Mike:没有子shell。这不起作用。在发布到这里之前,您是否在Bash上测试过它?Pipe并不总是解决此问题的有效方法<代码>读取,这样你的程序就会在你最意想不到的时候失败。您可以使用命令替换cd$(someCommand)
,而不是管道。您还可以使用PWD=$(…)命令
在管道中执行一次性命令。