Zor*_*war 9 zsh pipe io-redirection
有人可以解释一下这个命令中发生了什么:
echo foo >&2 | grep foo
Run Code Online (Sandbox Code Playgroud)
Zsh (5.0.2) 打印foo
两次。一个似乎是标准输出,一个是标准错误,因为运行这些命令:
{ echo foo >&2 | grep foo } >/dev/null
Run Code Online (Sandbox Code Playgroud)
和:
{ echo foo >&2 | grep foo } 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
两者都只打印foo
一次。
这就是MULTIOS的效果。
echo foo >&2 | grep foo
Run Code Online (Sandbox Code Playgroud)
将写入foo
stderr 并通过管道foo
传输到grep
. 由于 stderr 默认为终端,您将看到两foo
行,一行来自echo
,另一行来自grep
结果。
{ echo foo >&2 | grep foo } >/dev/null
Run Code Online (Sandbox Code Playgroud)
在这里,您看到了一行,因为 stdout 被重定向到/dev/null
,您只看到了foo
来自echo
.
{ echo foo >&2 | grep foo } 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
在这里,您看到了一行,因为 stderr 被重定向到/dev/null
,您只看到了foo
来自grep
.
您可以通过行输出颜色轻松查看终端中的差异。grep
将突出显示匹配的模式(或者您可以使用 强制它--color=always
)。
MULTIOS
默认情况下启用nomultios
选项未设置:
$ unsetopt | grep nomultios
nomultios
Run Code Online (Sandbox Code Playgroud)
要禁用它,只需设置nomultios
选项:
$ setopt nomultios
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
887 次 |
最近记录: |