函数中的bash cd不能使用管道

函数中的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函数将管道连接到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 $


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=$(…)命令
在管道中执行一次性命令。