Bash打印stderr,而不是stdout

Mig*_*ork 38 linux bash

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

php -l "foo/bar.php"
Run Code Online (Sandbox Code Playgroud)
  • 如果没有错误,它会向stdout输出"No errors"消息.
  • 如果有错误,它会向stderr输出详细消息.我只想要这个.

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

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

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

nne*_*neo 65

只需将stdout发送到null:

cmd > /dev/null
Run Code Online (Sandbox Code Playgroud)

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


anu*_*ava 6

您可以使用:

php -l "foo/bar.php" 2>&1 > /dev/null
Run Code Online (Sandbox Code Playgroud)

即将stderr重定向到stdout,将stdout重定向到/dev/null,以便仅stderr在您的终端上使用。

  • @WilliamPursell :) 对于普通的 bash 用户(也可以说,对于中级用户)它是 _mosty_ 相同的。因此,将其命名为_最大的错误之一_ 有点过分了。当我应该把某些东西称为最大的错误而不是像这样的东西时:`cd /tnp; rm -rf *`(作为 root 输入错误的 /tmp):)。但是,你是对的:这是一个_常见的错误_有时会导致奇怪的输出行为。:) (3认同)
  • 这不会将stderr放在“终端”上。它将stderr重定向到调用者的stdout。人们犯的最大错误之一是将“终端”与“标准输出”混为一谈。两者是不同的。永远不要假设stdout是tty。 (2认同)