首页 > 解决方案 > “管道标准错误,而不是标准输出”在 Zsh 中不起作用

问题描述

如何管道标准错误,而不是标准输出?完美地捕捉到了我的问题,第一个答案正是我最初尝试解决它的方式:

(echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null | less

(带有 echos 的 subshel​​l 命令是一个最小的占位符,这要归功于 user1934428 来演示该问题;我的实际问题有一个更有用的命令,但其他人都无法运行。)

但是,它不起作用:它同时显示 stdoutstderr。如果我移除管道,它会按预期工作,只显示标准错误。最终我意识到这可能是一个外壳的东西,并尝试了 bash:它在那里完美地工作。我正在使用 Zsh:Zsh 怎么办?

标签: shellzsh

解决方案


这是由于MULTIOS,当您提供多个重定向时,它会复制输出流。管道是隐式重定向。

输入ls >/dev/null | less你的zsh,即使你重定向它,你也会看到输出。那是多操作系统复制流。

unsetopt multios将提供所需的行为。这是一个非常方便的功能,如果我不会总是忘记它,直到它激怒我。

http://zsh.sourceforge.net/Doc/Release/Redirection.html#Multios


推荐阅读