Чтобы увидеть, имеет ли значение xargs, запустите командные строки, которые он запускает. Вот несколько способов точно увидеть, что он запускает, не рискуя изменить то, что он запускает:
php
во временном каталоге и поместите его в начало $PATH
. В этом скрипте запишите аргументы (и при необходимости запустите настоящий php
после ). strace
. Вы обнаружите, что команда похожа на
php -l./bootstrap/app.php./bootstrap/autoload.php./bootstrap/cache/services.php …
Следующим шагом будет изучение того, что делает эта команда.
Я не знаком с php
, но я предполагаю, что он обрабатывает только первое имя файла как имя сценария PHP, а в режиме lint он просто игнорирует все последующие аргументы. Таким образом, вам нужно запустить php -l
один раз для каждого скрипта, всего 12147 раз, вместо использования группового поведения xargs
.
Самый простой способ сделать это
find. -name \*.php -exec php -l {} \;
, но эта команда всегда будет возвращать 0, даже если некоторые вызовы php
возвращают ненулевой статус. Хотя find в 21 веке в основном не нуждается в xargs, преимущество xargs заключается в том, что он возвращает ненулевой статус, если любой вызов команды возвращает ненулевой статус. Поэтому запустите xargs, но скажите ему обрабатывать только один файл за раз с опцией -n
.
find. -name \*.php -print0 | xargs -0 -n 1 php -l