【问题标题】:builtin commands in a shell pipelineshell 管道中的内置命令
【发布时间】:2021-03-31 06:19:54
【问题描述】:

运行时

 ls | sort | cd /home

...我知道管道连接进程。

在Linux中,每个命令都运行在一个独立的进程中,我们知道它会将左边的stdout传递给右边的进程。

但出乎我的意料,什么都没有运行。 应该会更改到 /home 的目录,但没有任何反应。这是为什么呢?

【问题讨论】:

  • cd 将目录作为参数读取,而不是在 stdin 上读取,除非目录指定为 '-'
  • @HwanE 当您运行ls | sort | cd /home 时,您期望会发生什么?为什么?

标签: shell pipe


【解决方案1】:

bash 中,管道中的命令在不同的进程中执行。如果你输入

ls | sort | cd /home

....这个进程(更准确地说,它的一个子进程:try cd /home | pwd)会将其工作目录更改为/home,然后退出。父 shell(你正在使用的那个)的工作目录不会改变。

zsh 中,除了最后一个 管道中的所有命令都将在不同的进程中执行。所以在zsh

ls | sort | cd /home

会改变你的工作目录,但是

cd /home | ls | sort 

...不会

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多