我正在尝试使用if语句快速检查是否在bash脚本中安装了rpm。但我想默默地做。目前,当我运行脚本并且rpm确实存在时,它会将rpm的输出输出到我不想要的屏幕。
if rpm -qa | grep glib; then
do something
fi
也许rpm有一个选项,我错过了?或者如果我只是需要改变我的陈述?
感谢
答案 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