使用php -l myFile.php
命令(PHP 5.5.30)时,如果文件有语法错误,那么我会得到正确的警告和堆栈跟踪等。
但是,如果文件没有语法警告,我会收到消息
myFile.php中未检测到语法错误
当语法有效时,有没有办法让命令没有输出?我只关心文件是否有无效的语法 - 我不需要一条消息说它有效。
答案 0 :(得分:5)
"没有语法错误......"在stdout
上发送语法错误时,会在stderr
上发送消息。如果您不想要它们,可以将它们重定向到/dev/null
之类的地方。
php -l file.php 1> /dev/null
如果有任何错误或没有错误,将输出错误。你确实失去了解析错误......"消息,但如果出现问题则会收到错误。
答案 1 :(得分:1)
不要检查输出,检查返回码。
$ 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
答案 2 :(得分:1)
如果命令成功(返回0),您可以使用chronic
来禁止所有输出:
chronic php -l myFile.php
描述
chronic
运行命令,并安排其标准输出和标准错误仅在命令失败时显示(退出非零或崩溃)。如果命令成功,将隐藏任何无关的输出。
在Debian上,它位于moreutils
包中。
答案 3 :(得分:0)
php -ln script.php >/dev/null || php -ln script.php
编辑:
chronic php -ln script.php