关于linux:仅限Bash打印stderr,而不是stdout

Bash print stderr only, not stdout

本问题已经有最佳答案,请猛点这里访问。

我想lint一个文件,并打印stderr(错误消息),但不打印stdout(说该文件没问题)。

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

我认为它将是>&的一些魔力,但我从来没有理解这些是如何工作的。

我想要的是消耗所有stdout,保持stderr。

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


只需将stdout发送到null:

1
cmd > /dev/null

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


您可以使用:

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

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


If there are no errors, it prints a"No errors" message to stdout.
If there are errors, it prints a detailed message to stderr. I want only this one.

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

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