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

Dan*_*nny 8 bash rpm

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

if rpm -qa | grep glib; then
    do something
fi
Run Code Online (Sandbox Code Playgroud)

也许有一个我失踪的rpm选项?或者如果我只是需要改变我的陈述?

谢谢

zta*_*013 12

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

   --quiet
          Print  as little as possible - normally only error messages will
          be displayed.
Run Code Online (Sandbox Code Playgroud)

所以你可能想用这个:

if rpm -q --quiet glib ; then 
  do something 
fi
Run Code Online (Sandbox Code Playgroud)

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

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


vro*_*nov 7

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

if rpm -qa | grep -q glib; then
  do something
fi
Run Code Online (Sandbox Code Playgroud)

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

if rpm -qa | grep glib  2>&1 > /dev/null; then
  do something
fi
Run Code Online (Sandbox Code Playgroud)

  • rpm -q>/dev/null的答案更优雅一些.无需将grep带入此事. (2认同)

use*_*517 7

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

$ rpm -q zabbix-agent

package zabbix-agent is not installed

$ rpm -q curl

curl-7.24.0-5.25.amzn1.x86_64
Run Code Online (Sandbox Code Playgroud)

它看起来像:

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

Package zabbix-agent is already installed.
Run Code Online (Sandbox Code Playgroud)

  • 让我解释一下。如果您只能执行 rpm -q PACKAGE_NAME,则不需要 rpm -aq 和 grep。所以 rpm 会为你做 grep 。 (2认同)
  • 这是比公认的答案更优雅的答案。rpm -q 的返回值就是你所需要的。有趣的是,-qa 不会返回相同的返回码,因此您需要将 stdout 重定向到 /dev/null 并坚持使用 -q。 (2认同)