我需要查询一组软件包的版本。有些软件包可能没有安装在机器上,在这种情况下,我希望它们默默忽略。
不幸的是,rpm -q
似乎将请求的输出与诊断混合在一起,stdout
而不是像人们期望的那样将后者发送到stderr
。例如:
% rpm -q bash notinstalled
bash-4.2.46-19.el7.x86_64
package notinstalled is not installed
使用--quiet
标志抑制全部输出,这是毫无用处的......
我知道,我可以用 过滤掉不需要的字符串grep
,但我rpm
想不产生首先。或者,如果必须生成它们,则将它们发送到stderr
,然后我可以忽略它,或者直接发送到/dev/null
。
grep
是否有可能避免使用或类似的后期处理?
答案1
RPM(出于歇斯底里的原因)在带内(即在 stdin 上,而不是 stderr 上)返回一些状态/错误。因此建议使用 grep(或正确形成的命令)。
另一种方法是循环 CLI 参数,逐个调用,检查返回代码(但这比 grep 需要更多的编码,ymmv)。