从这我知道&> /dev/null
在 zsh 中将stdout
和重定向stderr
到/dev/null
.因此,
echo a &> /dev/null
没有输出。
然而,当我这样做时
echo a &> /dev/null | cat
cat 将打印a
,而我期望它不会打印任何内容。
这里发生了什么?
答案1
正如 don_crissti 已经提到的,这是 的默认行为zsh
,可以使用 关闭unsetopt multios
。
另请参阅 的联机帮助页zshmisc
。
答案2
请注意,管道是隐式重定向;因此
date >foo | cat
将日期写入文件“foo”,并将其通过管道传递给 cat。
从这里:http://zsh.sourceforge.net/Doc/Release/Redirection.html。
因此, withmultios
选项echo a &> /dev/null | cat
相当于echo a 2>1 | tee /dev/null | cat
在其他 shell 中,例如bash
.