如果find -exec返回非零,则停止make

时间:2012-08-06 21:45:08

标签: bash makefile find

我正在尝试使用pyflakes将我的代码集成到构建过程中。我在Makefile中定义了以下目标:

pyflakes:
    find $(APPLICATION_DIRECTORY) -iname "*.py" -exec pyflakes "{}" \;

问题是find每次都会返回0,即使存在代码问题(pyflakes不返回0)并且make成功。理想情况下,我想对每个源文件运行检查,如果make中至少有一个失败,请停止-exec。有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:4)

我认为无法让find返回-exec的退出代码 应该采用什么方法来管道xargs

find $(APPLICATION_DIRECTORY) -iname "*.py" |xargs -I file pyflakes file 

答案 1 :(得分:3)

您可以将find的输出传递给您自己的处理循环,并在pyflakes返回0以外的退出状态时退出。

find . -iname '*.jpg' | \
while read line ; do
    pyflakes "$line"
    res=$?
    if [ $res -ne 0 ] ; then
        exit $res
    fi
done

答案 2 :(得分:1)

通过

结束查找过程
pyflakes:
    find $(APPLICATION_DIRECTORY) -iname "*.py" -exec bash -c 'pyflakes {}; if [[ $$? != 0 ]]; then kill -INT $$PPID;fi' \;

如果您想知道语法,这就是makefile中的内容,它不是脚本文件。