强制 xargs 在第一个命令错误时停止

425*_*esp 4 find xargs

我正在运行一个命令来查找目录中的所有 make 文件并运行make build.

我想xargs在第一个make build失败时停止。

这是我到目前为止的命令。

$ find . -name "Makefile" | xargs dirname | xargs -I {} make -C {} build
Run Code Online (Sandbox Code Playgroud)

问题是,xargs即使make build失败了,它仍然会继续下去。当我检查最终状态代码时,我看到的是以下内容。

$ echo $?
123
Run Code Online (Sandbox Code Playgroud)

当我检查手册页时。这就是它所说的。

123 if any invocation of the command exited with status 1-125
Run Code Online (Sandbox Code Playgroud)

这是有道理的,因为其中一些因make buildexit 1 或其他原因而失败。

有没有办法xargs在第一个make build错误时停止?

小智 7

XARGS(1):

如果该命令的任何调用以状态 255 退出,xargs 将立即停止,而不读取任何进一步的输入。

可以使用子 shell 来返回255

find . -name "Makefile" | xargs dirname | \
  xargs -I {} sh -c 'make -C "$1" build || exit 255' sh {}
Run Code Online (Sandbox Code Playgroud)