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

Bash 如何确保在shell脚本中成功安装yum?,bash,shell,yum,Bash,Shell,Yum,我有一个shell脚本,它检查是否有互联网连接(通过ping google),然后调用 yum install packageA packageB --assumeyes 如何确认软件包已安装(或已安装)?我是否再次调用yum并解析输出(如果系统使用另一种语言,我认为这会变得非常复杂)?基于此,看起来yum向shell返回了一个错误代码。您可以通过运行一个命令,然后立即(作为下一个命令)执行以下操作来测试这一点: 这将打印上一个命令的返回代码。成功应该是0,某种失败不应该是0。但这只是一个猜测

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

yum install packageA packageB --assumeyes
如何确认软件包已安装(或已安装)?我是否再次调用yum并解析输出(如果系统使用另一种语言,我认为这会变得非常复杂)?

基于此,看起来yum向shell返回了一个错误代码。您可以通过运行一个命令,然后立即(作为下一个命令)执行以下操作来测试这一点:


这将打印上一个命令的返回代码。成功应该是0,某种失败不应该是0。但这只是一个猜测,因为我目前没有一个盒子可以打开。:)

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

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

yum list installed PACKAGE_NAME

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

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

  • 运行
    yum-y install$PACKAGES
    (我假设这是一个脚本,您确实希望传递
    -y
    以避免提示)
  • 检查其退出状态,以检测某些故障情况
  • 运行
    rpm--query--queryformat”“$PACKAGES
    ,对于成功安装的每个软件包,它将不输出任何内容,对于每个失败,它将输出
    未安装的软件包
  • 检查其退出状态,该状态似乎是未成功安装的软件包数,即正常情况下,成功安装时将为0

  • 只有当
    PACKAGES
    包含
    yum
    预期在存储库中找到的普通包名时,这才起作用,而如果它包含
    yum
    接受的URL等其他内容,则不起作用,文件名或
    提供:
    名称。

    您可以grep或parse/var/log/yum.logSetting
    LC_ALL=C
    应切换为英语。谢谢你——我刚才打电话给谷歌是想看看dns是否工作以及是否有连接。虽然这没有直接回答问题,但它回答了我的问题+1对你来说,这应该是它的工作原理。我的yum版本即使在某些失败的情况下也能成功退出<代码> YUM安装不存在的包&和回声“我认为这很好”<代码>上面提到的,有许多情况下<代码> yUM/COD>返回0,即使我认为它已经失败了,例如,您指定了一个包名,但在任何配置的存储库中都找不到该包,或者您指定了一个文件名,但找不到该文件
    yum的退出状态没有那么有用。
    
    yum list installed PACKAGE_NAME