При использовании php -l myFile.php
команда (PHP 5.5.30), если файл имеет синтаксическую ошибку, я получаю правильные предупреждения и трассировки стека и т. д.
Однако, если файл не имеет синтаксических предупреждений, я получаю сообщение
В myFile.php синтаксических ошибок не обнаружено
Есть ли способ, чтобы команда не имела вывода, когда синтаксис действителен? Мне важно только, если файл имеет неверный синтаксис — мне не нужно сообщение о том, что он действителен.
Сообщение «нет синтаксических ошибок …» отправлено на stdout
в то время как синтаксические ошибки отправляются на stderr
, Вы можете перенаправить их куда-то, как /dev/null
если ты не хочешь их.
php -l file.php 1> /dev/null
это выведет ошибки, если они были или нет, если ошибок нет. Вы теряете сообщение «Разбор ошибок …», но получаете ошибки, если возникла проблема.
Не проверяйте вывод, проверьте код возврата.
$ 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
Ты можешь использовать chronic
подавить весь вывод, если команда выполнена успешно (возвращает 0):
chronic php -l myFile.php
ОПИСАНИЕ
chronic
запускает команду и обеспечивает отображение ее стандартного выхода и стандартной ошибки только в случае сбоя команды (выход из ненулевого значения или сбой). Если команда выполнена успешно, любой посторонний вывод будет скрыт.
На Debian это в moreutils
пакет.
php -ln script.php >/dev/null || php -ln script.php
РЕДАКТИРОВАТЬ:
chronic php -ln script.php