首页 > 解决方案 > 如果 xargs 没有参数,请提前退出管道

问题描述

假设我有这个管道:

pgrep -P $$ | xargs kill -INT; sleep 0.6; pgrep -P $$ | xargs kill -9; 

如果 xargs 没有参数,我想要做的是避免睡眠调用。

像这样的东西:

pgrep -P $$ | (exit if no args) | xargs kill -INT; sleep 0.6; pgrep -P $$ | xargs kill -9; 

我怎样才能干净地做到这一点?我不想弄乱管道并得到奇怪的错误。

标签: bashshellunixpipexargs

解决方案


GNUxargs-r专门针对这个用例的选项。您必须稍微重构脚本;我会简单地去

pgrep -P $$ | xargs -r kill -INT
( sleep 0.6; pgrep -P $$ | xargs -r kill 9 ) &

如果第一个命令设法杀死所有子进程,则第二个命令最终将成为无操作。

这不能移植到xargs缺少此选项的 *BSD 等。


推荐阅读