如果命令非空则执行

如果命令非空则执行
sudo kill $(ps aux | grep '[p]ostgres'|awk '{print $2}')

对于上述命令,我希望它仅在以下情况下执行

$(ps aux | grep '[p]ostgres'|awk '{print $2}')

是非空的,否则会抛出这样的错误

在此处输入图片描述

我该如何实现这个目标?

答案1

钢铁司机评论出于特定目的,最好使用,因为过滤viapkill -f的输出会导致命令本身出现在列表中。相比之下,不会出现这种情况,并且执行起来很干净。psgrepgreppspkill

至于一般的如果某个命令的位置参数为空,而你又想运行该命令,那么有两种方法可以解决。第一种方法是保存到变量并检查变量是否为空:

var=$(ps aux | grep '[p]ostgres'|awk '{print $2}')
if ! [ "x$var" = "x"  ]; then
    sudo kill "$var"
fi

另一种方法是通过xargsand --no-run-if-empty(或简写-r):

ps aux | grep '[p]ostgres'|awk '{print $2}' | xargs --no-run-if-empty kill

相关内容