检查bash脚本中是否存在rpm静默

时间:2011-11-10 18:03:25

标签: bash rpm

我正在尝试使用if语句快速检查是否在bash脚本中安装了rpm。但我想默默地做。目前,当我运行脚本并且rpm确实存在时,它会将rpm的输出输出到我不想要的屏幕。

if rpm -qa | grep glib; then
    do something
fi

也许rpm有一个选项,我错过了?或者如果我只是需要改变我的陈述?

感谢

5 个答案:

答案 0 :(得分:11)

--quiet命令有一个有趣的rpm选项。手册页说:

   --quiet
          Print  as little as possible - normally only error messages will
          be displayed.

所以你可能想要使用这个:

if rpm -q --quiet glib ; then 
  do something 
fi

这种方式应该更快,因为它不必等待安装-qa(查询所有)rpm包,而只是查询目标rpm包。当然,如果安装或不安装,您必须知道要测试的软件包的正确名称。

注意:在fedora 15上使用RPM版本4.9.1.2

答案 1 :(得分:7)

实际上你只需要-q选项:

$ rpm -q zabbix-agent

package zabbix-agent is not installed

$ rpm -q curl

curl-7.24.0-5.25.amzn1.x86_64

看起来像:

$ if rpm -q zabbix-agent > /dev/null; then echo "Package zabbix-agent is already installed."; fi

Package zabbix-agent is already installed.

答案 2 :(得分:5)

1)您可以将-q开关添加到grep

if rpm -qa | grep -q glib; then
  do something
fi

2)您可以将stout和/或stderr输出重定向到/ dev / null

if rpm -qa | grep glib  2>&1 > /dev/null; then
  do something
fi

答案 3 :(得分:1)

你可以这样做:

[ -z "$(rpm -qa|grep glib)" ] && echo none || echo present

...或者,如果您愿意:

if [ $(rpm -qa|grep -c glib) -gt 0 ]; then
    echo present
else
    echo none
fi

答案 4 :(得分:1)

您可以测试命令是否返回字符串,命令替换将捕获输出:

[[ "$(rpm -qa | grep glib)" ]] && do something