![仅当旧版本不存在时如何“rpm -i”软件包?](https://linux22.com/image/17689/%E4%BB%85%E5%BD%93%E6%97%A7%E7%89%88%E6%9C%AC%E4%B8%8D%E5%AD%98%E5%9C%A8%E6%97%B6%E5%A6%82%E4%BD%95%E2%80%9Crpm%20-i%E2%80%9D%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
我希望从 shell 脚本安装一些 RPM 软件包。我想确保确实安装了每个包,但我不想更新已经安装了旧版本的包(以避免深入依赖解析)。
我怎样才能以这样的方式实现这一点,即在已安装旧版本的情况下将返回而不返回错误代码,而在其他失败的情况下将返回错误代码?这使我能够控制脚本的良好执行。
答案1
您可以根据系统中存在的软件包进行安装:
rpm -q mypackage || rpm -i mypackage.rpm
答案2
使用以下命令rpm -q mypackage && rpm -i mypackage.rpm
。如果查询 rpm 成功,则将继续安装 rpm 包。否则,如果查询失败,则安装将不会继续。但是,如果您使用||
而不是&&
,那么尽管前面查询包的命令失败,它仍会尝试安装该包,无论如何这是没有意义的。
答案3
如果您首先测试相关软件包是否已安装,如果没有,则安装它,该怎么办?正如您所写,您希望在 Shell 脚本中实现这一点,这将是某种if
-clause。
伪代码:
if is_installed($package)
then
return is_already_installed
else
rpm -i $package
return $?
fi
第一部分可以通过对当前安装的版本进行另一次测试来扩展(例如,用于脚本的最终报告)。
答案4
您可能会发现rpm -q <package name>
很有帮助,甚至rpm -U
可以升级。