如何确保在shell脚本中成功安装yum?

jed*_*ikb 9 bash shell yum

我有一个shell脚本,检查是否有互联网连接(通过ping谷歌),然后调用

yum install packageA packageB --assumeyes
Run Code Online (Sandbox Code Playgroud)

我如何确认软件包已安装(或已安装)?我是否进行另一个yum调用并解析输出(如果系统使用另一种语言,我认为这会非常复杂)?

dos*_*hea 13

我使用了以下方法,这可能不是万无一失,但似乎有效:

假设变量PACKAGES包含要安装的包列表,则:

  1. 运行yum -y install $PACKAGES(我假设这是一个脚本,你真的想传递-y以避免提示).
  2. 检查其退出状态以检测某些故障情况.
  3. 运行rpm --query --queryformat "" $PACKAGES,它将不会为每个成功安装的包输出任何内容,并将package <name> is not installed为每个失败输出.
  4. 检查其退出状态,该状态似乎是未成功安装的软件包数,即成功时将为0.

这仅在PACKAGES包含yum预期在存储库中找到的普通包名称时才有效,而不是包含其他yum接受类似URL,文件名或Provides:名称的内容.


Dan*_*ego 6

根据这篇随机文章,看起来yum会向shell返回错误代码.您可以通过运行命令来测试它,然后立即(作为下一个命令)执行:

echo $?
Run Code Online (Sandbox Code Playgroud)

这将打印上一个命令的返回码.成功应该是0,某种非零的失败.但这只是猜测,因为我现在还没有可以访问的盒子.:)

  • 如上所述,有很多情况下`yum`返回0,即使我认为它已经失败,例如你指定了一个包名但是在任何已配置的存储库中都找不到该包,或者你指定了一个文件名但是找不到该文件.`yum`的退出状态不是那么有用. (6认同)
  • 这应该是它的工作原理.我的yum版本即使在某些失败时也会成功退出; `yum install non-existant-package && echo"我觉得这很顺利"` (5认同)

ajr*_*eal 6

通过ping google.com无法确保您尝试连接的yum repo可用

检查包是否已安装的命令: -

yum list installed PACKAGE_NAME
Run Code Online (Sandbox Code Playgroud)