php -l:抑制有效文件的输出

php -l: suppress output on valid files

当使用 php -l myFile.php 命令(PHP 5.5.30)时,如果文件有语法错误,我会收到正确的警告和堆栈跟踪等。

但是,如果文件没有语法警告,我会收到消息

No syntax errors detected in myFile.php

有没有办法让命令在语法有效时没有输出?我只关心文件是否具有无效语法 - 我不需要说明它有效的消息。

"no syntax errors..." 消息在 stdout 上发送,而语法错误在 stderr 上发送。如果你不想要它们,你可以将它们重定向到 /dev/null 之类的地方。

php -l file.php 1> /dev/null

如果有错误则输出错误,如果没有错误则什么也不输出。您确实丢失了 "Errors parsing..." 消息,但如果出现问题,将会收到错误消息。

不要检查输出,检查 return 代码。

$ php -l good.php &> /dev/null; echo $?
0

$ php -l bad.php &> /dev/null; echo $?
255

所以:

if ! php -l somescript.php &> /dev/null; then
  echo 'OH NOES!'
fi

或者,如果您喜欢:

if ! foo=$(php -l somescript.php 2>&1); then
  echo $foo
fi
php -ln script.php >/dev/null || php -ln script.php

编辑:

chronic php -ln script.php

如果命令成功 (returns 0):

,您可以使用 chronic 来抑制所有输出
chronic php -l myFile.php

DESCRIPTION

chronic runs a command, and arranges for its standard out and standard error to only be displayed if the command fails (exits nonzero or crashes). If the command succeeds, any extraneous output will be hidden.

在 Debian 上,它位于 moreutils 软件包中。