当Bash和Zsh连接到管道时,重定向会有不同的行为:
bash> echo foo >/dev/null | cat
bash>
zsh> echo foo >/dev/null | cat
foo
zsh>
Bash做我期望的事情; 在Zsh中,被重定向到/dev/null
的标准输出似乎又回来了。
为什么会有这种差异?每种情况下都发生了什么?
当Bash和Zsh连接到管道时,重定向会有不同的行为:
bash> echo foo >/dev/null | cat
bash>
zsh> echo foo >/dev/null | cat
foo
zsh>
Bash做我期望的事情; 在Zsh中,被重定向到/dev/null
的标准输出似乎又回来了。
为什么会有这种差异?每种情况下都发生了什么?
Zsh有一个名为multios的花哨功能。如果你关闭它,行为几乎与Bash相同。
% echo a >/dev/null | cat
a
% set +o multios
% echo a >/dev/null | cat
%
这个在手册中有如下记录。
Note that a pipe is an implicit redirection; thus[, when multios is on, and it is on by default]
date >foo | cat
writes the date to the file
foo
, and also pipes it tocat
.