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

php-l:抑制有效文件上的输出,php,phplint,Php,Phplint,当使用php-l myFile.php命令(PHP5.5.30)时,如果文件有语法错误,那么我会得到正确的警告和堆栈跟踪,等等 但是,如果文件没有语法警告,我会收到消息 在myFile.php中未检测到语法错误 当语法有效时,有没有办法使命令没有输出?我只关心文件是否有无效语法-我不需要一条消息说它是有效的。在stdout上发送“无语法错误…”消息,而在stderr上发送语法错误。如果不需要,可以将它们重定向到/dev/null之类的地方 php -l file.php 1> /dev/n

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

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

在myFile.php中未检测到语法错误

当语法有效时,有没有办法使命令没有输出?我只关心文件是否有无效语法-我不需要一条消息说它是有效的。

stdout
上发送“无语法错误…”消息,而在
stderr
上发送语法错误。如果不需要,可以将它们重定向到
/dev/null
之类的地方

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

如果有错误,则输出错误;如果没有错误,则不输出错误。您确实会丢失“Errors parsing…”消息,但如果出现问题,将获得错误。

不要检查输出,请检查返回代码

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

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

或者如果你觉得自己很花哨:

if ! foo=$(php -l somescript.php 2>&1); then
  echo $foo
fi
编辑:


如果命令成功(返回0),您可以使用
chronic
抑制所有输出:


描述
chronic
运行命令,并安排仅在命令失败(退出非零或崩溃)时显示其标准输出和标准错误。如果命令成功,任何无关的输出都将被隐藏


在Debian上,它位于
moreutils
包中。

我通常在php.ini中为开发设置错误为true,或者在生产中直接在该php文件上设置错误,然后运行php-f PHPFILENAME。php@Binary101010无论如何这都不一样
-l
只检查语法错误。为什么要运行脚本,可能对文件或数据库进行更改,如果包含的/必需的文件不可用或出现任何其他数量的错误,则抛出错误。只是为了检查文件语法是否正确。我没有检查输出或返回代码。作为gulp构建过程的一部分,我正在运行lint任务。在myFile.php中检测到的
无语法错误
消息显示在npm构建输出/日志中,使它们非常混乱。我想阻止他们在那里,我喜欢。有点老套,但它完成了任务。我将稍等片刻,看看是否有人知道如何首先停止输出,但这很好,谢谢!我有一个bash脚本,我使用它在从版本控制系统创建补丁之前检查这样的文件状态。本质上,我所做的就是Sammitch所建议并检查
if!php-l file.php&>/dev/null;然后
如果这是真的,那么再次调用
php-l file.php
,这样它就会输出任何错误。而且,这不是“黑客”。bash脚本路由输出是非常标准的。调用
php-l
是否比将第一次调用的输出移到临时文件中,然后在not调用返回true时转储该文件好两倍?我不知道这是否有多大区别。至少对我来说不是这样。运行这些行的脚本用于从版本控制系统生成补丁。因此,如果我是一名优秀的程序员,并且在进行测试的过程中,我将永远不必运行它两次。只有当我在测试后犯了一个错误,而在签入一个变更之前,我没有发现这个错误时,它才会出现。我将运行linter作为构建过程的一部分-如果lint失败,测试甚至不会执行(并且该失败也会导致pr部署失败)。您能简单解释一下这是怎么做的吗?这非常低效-为什么在存在
chronic
等工具时重新运行该命令?如果script.php有效,则没有输出“未检测到语法错误”且未重新运行。如果脚本无效,则输出错误消息。感谢chonic。
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
chronic php -l myFile.php