我正在运行一个命令来查找目录中的所有 make 文件并运行make build
.
我想xargs
在第一个make build
失败时停止。
这是我到目前为止的命令。
$ find . -name "Makefile" | xargs dirname | xargs -I {} make -C {} build
问题是,xargs
即使失败了,它仍然会继续下去make build
。当我检查最终状态代码时,我看到的是以下内容。
$ echo $?
123
当我检查手册页时。这就是它所说的。
123 if any invocation of the command exited with status 1-125
这是有道理的,因为其中一些make build
因 exit 1 或其他原因而失败。
有没有办法xargs
在第一个make build
错误时停止?
答案1
XARGS(1):
如果该命令的任何调用以状态 255 退出,xargs 将立即停止,而不读取任何进一步的输入。
可以使用子 shell 来返回255
:
find . -name "Makefile" | xargs dirname | \
xargs -I {} sh -c 'make -C "$1" build || exit 255' sh {}