Bash打印stderr,而不是stdout

时间:2014-08-15 17:29:08

标签: linux bash

我想lint一个文件,然后打印stderr(错误信息),但是不打印stdout(说文件没问题)。

php -l "foo/bar.php"
  • 如果没有错误,则会向stdout输出“No errors”消息。
  • 如果有错误,它会向stderr打印详细消息。我只想要这个。

我认为>&会有些神奇,但我从来不知道它们是如何运作的。

我想要的是消耗所有标准输出,保持stderr。

(对不起,如果这是假的,但我没有发现任何确切的问题)

3 个答案:

答案 0 :(得分:58)

只需将stdout发送到null:

cmd > /dev/null

这保留了stderr,但是抑制了stdout。

答案 1 :(得分:5)

您可以使用:

php -l "foo/bar.php" 2>&1 > /dev/null

即。将stderr重定向到stdout并将stdout重定向到/dev/null,以便只在终端上获取stderr

答案 2 :(得分:0)

  

如果没有错误,则会打印一个"没有错误"给stdout的消息。   如果有错误,它会向stderr输出详细消息。我只想要这个。

如果发送了一条错误消息,则会打印错误消息;如果为空,则会打印No error.

ERROR=$(exec php -l "foo/bar.php" 2>&1 >/dev/null)
[[ -z $ERROR ]] && ERROR='No error.'
echo "$ERROR"