仅当旧版本不存在时如何“rpm -i”软件包?

仅当旧版本不存在时如何“rpm -i”软件包?

我希望从 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可以升级。

相关内容