如果输出中有零行或多行,如何使命令失败

如果输出中有零行或多行,如何使命令失败

假设我有一条这样的命令

git log --some-options

我希望它能产生恰好一个xargs线,这样我就可以把它喂给git log --some-options | xargs git branch --all --contains

我如何确保当git log命令产生 0 行或多行时,我的命令就会失败并且git branch永远不会被调用?

答案1

当没有输入时不运行命令xargs很容易 - 它有-r这个选项。对于我见过的大多数 xargs 用法,你应该使用此选项。

不对多行输入运行命令可能会比较棘手,但可以使用 awk 来实现,只有当输入一行时才打印输入:

... | awk 'END { if (NR == 1) print }'

例如:

% seq 1 10 | awk 'END { if (NR == 1) print }'
% # no output
% seq 1 | awk 'END { if (NR == 1) print }'
1

然后你可以将两者结合起来:

git log --some-options | awk 'END { if (NR == 1) print }' | xargs -r git branch --all --contains

答案2

使用wc -l方式如下:

[[ $(git log --some-options | wc -l) -eq 1 ]] && git log --some-options | xargs git branch --all --contains

该条件[[ $(git log --some-options | wc -l) -eq 1 ]]检查命令中的行数是否git log --some-options正好为 1,如果为真,则运行后面的命令&&(bash 中的逻辑与)。

相关内容