如何通过管道传输 stderr,而不是 stdout? https://stackoverflow.com/questions/2342826/how-to-pipe-stderr-and-not-stdout完美地捕捉了我的问题,第一个答案正是我最初尝试解决它的方式:
(echo stdout; echo 1>&2 stderr) 2>&1 >/dev/null | less
(带有 echos 的 subshell 命令是一个最小的占位符,感谢 user1934428 来演示该问题;我的实际问题有一个更有用的命令,但其他人都无法运行。)
但是,它不起作用:它显示了两个标准输出and一起stderr。如果我删除管道,它会按预期工作,只显示 stderr。最终我意识到这可能是一个 shell 东西,并尝试了 bash:它在那里完美地工作。我正在使用 Zsh:Zsh 会导致失败吗?
这是因为MULTIOS
,当您提供多个重定向时,它会复制输出流。管道是隐式重定向。
Type ls >/dev/null | less
在你的zsh
即使您重定向了它,您也会看到输出。这是多操作系统复制流。
unsetopt multios
将提供所需的行为。这是一个非常方便的功能,如果我不会总是忘记它直到它激怒我的话。
http://zsh.sourceforge.net/Doc/Release/Redirection.html#Multios http://zsh.sourceforge.net/Doc/Release/Redirection.html#Multios
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)