如何在仅打印出有错误的文件时递归地检查所有文件?
How to lint all the files recursive while printing out only files that have an error?
我想对当前(递归)目录中的所有文件进行 lint,同时仅打印出有错误的文件,并将变量分配给 1,以便在 linting 完成后使用。
#!/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
返回错误。
parallel
命令已经完成了您想要的操作:如果所有作业都以 0 退出,则它以 0 退出;如果任何一个作业以非零退出,则以非零退出。 parallel
的退出选项是可配置的,详情请参阅 man parallel
的 EXIT STATUS
部分。
在您的脚本中,|| echo
的使用掩盖了作业的退出状态,但您可以通过类似的方式再次暴露它(在 [=21= 上测试 bash 4.4.7 ]):
#!/bin/bash
php_lint_file()
{
local php_file=""
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 Parallel Lint tool 来更快地检查 PHP 文件的语法,并通过 运行 并行作业输出更漂亮的输出,同时只打印出有错误的文件。
用法示例:
./bin/parallel-lint --exclude app --exclude vendor .
或者使用 Ant 的 build.xml
:
<condition property="parallel-lint" value="${basedir}/bin/parallel-lint.bat" else="${basedir}/bin/parallel-lint">
<os family="windows"/>
</condition>
<target name="parallel-lint" description="Run PHP parallel lint">
<exec executable="${parallel-lint}" failonerror="true">
<arg line="--exclude" />
<arg path="${basedir}/app/" />
<arg line="--exclude" />
<arg path="${basedir}/vendor/" />
<arg path="${basedir}" />
</exec>
</target>
我想对当前(递归)目录中的所有文件进行 lint,同时仅打印出有错误的文件,并将变量分配给 1,以便在 linting 完成后使用。
#!/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
返回错误。
parallel
命令已经完成了您想要的操作:如果所有作业都以 0 退出,则它以 0 退出;如果任何一个作业以非零退出,则以非零退出。 parallel
的退出选项是可配置的,详情请参阅 man parallel
的 EXIT STATUS
部分。
在您的脚本中,|| echo
的使用掩盖了作业的退出状态,但您可以通过类似的方式再次暴露它(在 [=21= 上测试 bash 4.4.7 ]):
#!/bin/bash
php_lint_file()
{
local php_file=""
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 Parallel Lint tool 来更快地检查 PHP 文件的语法,并通过 运行 并行作业输出更漂亮的输出,同时只打印出有错误的文件。
用法示例:
./bin/parallel-lint --exclude app --exclude vendor .
或者使用 Ant 的 build.xml
:
<condition property="parallel-lint" value="${basedir}/bin/parallel-lint.bat" else="${basedir}/bin/parallel-lint">
<os family="windows"/>
</condition>
<target name="parallel-lint" description="Run PHP parallel lint">
<exec executable="${parallel-lint}" failonerror="true">
<arg line="--exclude" />
<arg path="${basedir}/app/" />
<arg line="--exclude" />
<arg path="${basedir}/vendor/" />
<arg path="${basedir}" />
</exec>
</target>