微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 管道中cd命令的行为

我的问题是为什么当cd在管道的开头或中间时,cd的行为与bash的行为方式相同.

当我给
cd | ls,它仍然打印父目录中的文件,基本上有效,它忽略了cd命令.

为什么在csh中没有以这种方式实现:
当我给cd | ls,它应该cd到home directoy并在该目录上应用ls.当控制返回到shell时,它应该保留shell运行时的旧值pwd.
即管道中的cd应该使用cd命令右侧所有命令的已更改目录.

在这里错过了一些基本的设计原则吗?

解决方法:

你确实错过了一个基本的设计原则.

通常,当您启动一个进程时,它有自己的“环境”,包括所有环境变量和当前工作目录.进程所做的任何更改都仅限于该进程及其子进程.实际上这是非常可取的,想象一下,如果进程可能影响他们的兄弟姐妹,甚至更糟糕的是他们的父母,那么可能会出现混乱.

当你有管道时,你有一个父,你指定了一个管道的shell和一些所有“管道”在一起的孩子,每个孩子都有一个独立的环境.

一旦理解了这一点,就可以很容易地处理事物并更改父目录中的目录.

  (cd /etc && ( ls | grep x))

这里整个事情都在()中,因此它在子进程中运行,因此cd不会影响当前的shell,但会影响在(grand-)子进程中运行的管道.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐