如果我有以下bash命令:
for i in ./ x ; do ls $i ; done && echo OK
" ls ./"执行,然后" ls x",失败(缺少x),不打印OK。
如果
for i in x ./ ; do ls $i ; done && echo OK
然后即使" ls x"失败,因为for循环中的最后一个语句成功,然后打印OK。在makefile中使用shell for循环时出现问题:
x:
for i in $(LIST) ; do \
cmd $$i ;\
done
如果cmd的任何单独执行失败,如何使make失败?
答案 0 :(得分:17)
使用break
命令在命令失败时终止循环
x:
for i in $(LIST) ; do \
cmd $$i || break ;\
done
但这不会使makefile中止。您可以将exit
与非零代码一起使用:
x:
for i in $(LIST) ; do \
cmd $$i || exit 1 ;\
done
答案 1 :(得分:1)
执行该命令后,使用$?
检查该命令的返回值,作为其make文件,您需要使用双$
。如果非零,则退出失败。
x:
set -e
for i in $(LIST); do \
cmd $$i; \
[[ $$? != 0 ]] && exit -1; \
echo 'done'; \
done