尝试运行生成大量stdout和stderr的命令。 需要一种方法来过滤大多数stderr消息。
像
这样的东西command 1> grep "a" 2> grep "b"
替代如何只使用grep stderr而且还能看到stdout。
答案 0 :(得分:-1)
执行:
{ command 2>&1 1>&3 3>&- | grep "b"; } 3>&1 1>&2 | grep "a"
注意:以上内容是从antak's answer to "pipe stdout and stderr to two different processes in shell script?"中窃取的,grep
替换了更抽象的名称。有关它的工作原理,请参阅答案。
(尽管如此,需要grep
的懒惰程序员可能更喜欢这样一个更具体的答案。)
用于区分 stdout 和 stderr 的有用工具是annotate-output
,(在 Debian 的“ devscripts < / em>“package”,它将 stderr 和 stdin 发送到 stdout 以及有用的小前缀:
annotate-output wc -c /bin/bash /bin/nosuchshell
输出:
00:29:06 I: Started wc -c /bin/bash /bin/nosuchshell
00:29:06 E: wc: /bin/nosuchshell: No such file or directory
00:29:06 O: 1099016 /bin/bash
00:29:06 O: 1099016 total
00:29:06 I: Finished with exitcode 1
可以使用sed
,awk
,甚至是tee
和一些grep
来分别解析该输出。