stdin/stdout 与 subshel​​l 和 cd 命令结合的行为

Abd*_*ull 8 pipe io-redirection cd-command subshell

我有以下一系列命令:

cd / && ls | ( cd /tmp && cat >dumpfile)
Run Code Online (Sandbox Code Playgroud)

这一系列命令执行以下操作:它创建一个名为/tmp/dumpfile. 该文件包含根目录的列表。

cd / && ls输出被输送到一个子shell。我觉得奇怪的是,在子外壳中,不是cd /tmp吞下ls输出,而是 后者cat >dumpfile获取它并将其写入文件。这里发生了什么?

Mik*_*kel 8

管道设置标准输出从ls子外壳。

在子shell中,cd /tmpcat是在同一个进程中完成的。

cd /tmp不从 stdin(管道)cat读取,因此当从 stdin 读取时,它会获取所有ls的输出。