似乎较新版本的bash有 &>
运算符,如果我理解正确的话,将stdout和stderr重定向到一个文件( &>>
将附加到文件,而Adrian澄清) .
实现相同目标的最简单方法是什么,而是管道到另一个命令?
例如,在这一行:
cmd-doesnt-respect-difference-between-stdout-and-stderr | grep -i SomeError
我希望grep能够匹配stdout和stderr中的内容(实际上,将它们组合成一个流) .
注意:这个问题是询问管道,而不是重定向 - 因此它不是它当前标记为重复的问题的副本 .
2 回答
Bash有
2>&1 |
的简写,即|&
,它管道stdout和stderr(参见manual):这是在Bash 4.0中引入的,请参阅release notes .
(注意
&>>file
附加到文件,而&>
将重定向并覆盖以前存在的文件 . )要组合
stdout
和stderr
,您可以使用2>&1
将后者重定向到前者 . 这将stderr(文件描述符2)重定向到stdout(文件描述符1),例如:stdout
去了stdout,stderr
去了stderr .grep
只看到stdout
,因此stderr
打印到终端 .另一方面:
写入stdout和stderr后,
2>&1
将stderr重定向回stdout,grep
在stdin上查看两个字符串,从而过滤掉两者 .您可以阅读有关重定向here的更多信息 .
关于你的例子(POSIX):
或者,使用
>=bash-4
: