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

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

我正在运行一个命令来查找目录中的所有 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 {}

相关内容