我想运行严格的语法检查:
$ php -d error_reporting=32767 -l test.php
我在Travis CI项目中的所有php文件。
我尝试使用 find ,但即使exec标志的命令失败,它也总是返回0
$ find . -type f -name "*.php" -exec php -d error_reporting=32767 -l {} \;
PHP Parse error: syntax error, unexpected end of file, expecting ',' or ';' in ./test.php on line 3
$ echo $?
0
答案 0 :(得分:4)
我通过检查查找 + php 是否向STDERR返回任何内容来解决此问题。
before_script:
- '! find . -type f -name "*.php" -exec php -d error_reporting=32767 -l {} \; 2>&1 >&- | grep "^"'
这是如何工作的?添加:
2>&1 >&-
在任何命令删除STDOUT并将STDERR重定向到STDOUT之后。
然后我们可以检查输出是否包含 grep :
的任何行| grep "^"
然后因为grep返回 0 如果它找到任何东西而 1 如果它没有找到任何东西我们需要通过在其中使用感叹号来否定最终结果开始这个命令。否则,当一切正常并且在事情失败时成功时,此命令将失败。