为什么管道中的重定向在Bash和Zsh中表现不同?

当连接到管道时,重定向在 Bash 和 Zsh 中的行为不同:

bash> echo foo >/dev/null | cat
bash>
zsh> echo foo >/dev/null | cat
foo
zsh>

Bash 符合我的预期;在 Zsh 中,重定向到的 STDOUT/dev/null似乎死而复生。

为什么会有这种差异?在每种情况下发生了什么?

回答

Zsh 有一个叫做multios的奇特功能。如果关闭它,行为将几乎与 Bash 相同。

% echo a >/dev/null | cat
a
% set +o multios          
% echo a >/dev/null | cat
% 

这在手册中记录如下。

请注意,管道是一种隐式重定向;因此[,当multios开启时,默认开启]

date >foo | cat

将日期写入文件foo,并将其通过管道传输到cat.


以上是为什么管道中的重定向在Bash和Zsh中表现不同?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>