php – 如何在打印出只有错误的文件时如何递归所有文件?
作者:互联网
我想lint当前(递归)目录中的所有文件,同时只打印出有错误的文件,并在linting完成后将一个变量赋值为1.
#!/bin/bash
lint_failed=0
find . -path ./vendor -prune -o -name '*.php' | parallel -j 4 sh -c 'php -l {} || echo -e "[FAIL] {}" && lint_failed=1';
if [ "$lint_failed" -eq "1" ]; then
exit 1
fi
例:
[FAIL] ./app/Model/Example.php
上面的代码没有发现任何错误,但如果我运行php -l ./app/Model/Example.php则会返回错误.
解决方法:
并行命令已经执行了您想要的操作:如果所有作业都退出0,则退出0;如果任何一个作业退出非零,则退出非零. parallel的退出选项是可配置的,有关详细信息,请参阅man parallel的EXIT STATUS部分.
在您的脚本中,使用|| echo模糊了作业的退出状态,但你可以再次公开这样做(在ubuntu上测试bash 4.4.7):
#!/bin/bash
php_lint_file()
{
local php_file="$1"
php -l "$php_file" &> /dev/null
if [ "$?" -ne 0 ]
then
echo -e "[FAIL] $php_file"
return 1
fi
}
export -f php_lint_file
find . -path ./vendor -prune -o -name '*.php' | parallel -j 4 php_lint_file {}
if [ "$?" -ne 0 ]
then
exit 1
fi
标签:php,bash,gnu-parallel,phplint 来源: https://codeday.me/bug/20190627/1305282.html