作者:平凡的稳健投资 | 来源:互联网 | 2023-06-03 08:18
当连接到管道时,重定向在 Bash 和 Zsh 中的行为不同:bash> echo foo >/dev/null | catbash>zsh> echo foo >/dev/null | catfoo
当连接到管道时,重定向在 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
.