我想对一个文件进行lint,输出标准错误(stderr)(即错误信息),但不输出标准输出(stdout)(表示文件OK)。
php -l "foo/bar.php"
- 如果没有错误,则将“无错误”消息打印到stdout。
- 如果有错误,则将详细消息打印到stderr。我只想要这一个。
我猜这将涉及使用>&
的某些魔法,但我从未理解过它们是如何工作的。
我想要的是消耗所有的标准输出,保留标准错误输出。
(如果这是重复的问题,对不起,但我没有找到任何关于这个问题的确切问题)
只需将标准输出发送到 null:
cmd > /dev/null
这将保留标准错误(stderr),但屏蔽标准输出(stdout)。
您可以使用:
php -l "foo/bar.php" 2>&1 > /dev/null
即将标准错误重定向到标准输出,并且将标准输出重定向到/dev/null
,以便在您的终端上只获取stderr
。
cd /tnp; rm -rf *
(在root权限下误输入了/tmp)。但是,你说得对:这是一个常见的错误,有时会导致奇怪的输出行为。 - clt60error=$(php -l "foo/bar.php" 2>&1 >/dev/null)
[[ -z $error ]] && error="No error."
echo "$error"
$(source foobar 2>&1 >/dev/null)
失败了,而且它还用最后的 echo 打印了输出的第二次。我正在寻找一种方法来 source foobar
,不显示 foobar 的内容,但仍然输出错误消息(例如文件不存在或无法读取)。 - rainabba