假设我有一条这样的命令
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 中的逻辑与)。