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
获取它并将其写入文件。这里发生了什么?
管道设置标准输出从ls
子外壳。
在子shell中,cd /tmp
和cat
是在同一个进程中完成的。
cd /tmp
不从 stdin(管道)cat
读取,因此当从 stdin 读取时,它会获取所有ls
的输出。