升级或安装自制配方

uml*_*ute 6 homebrew

在我的 CI 设置中,我想确保安装了给定公式的最新版本,无论它是否已经安装。

我目前正在使用类似的东西:

brew update
brew install FORMULA || (brew upgrade FORMULA && brew cleanup FORMULA)
Run Code Online (Sandbox Code Playgroud)

这种方法有什么陷阱?有没有更好的方法来解决这个问题(例如,首先查询 FORMULA 是否已经安装,而不是brew install仅在安装 FORMULA 时才依赖失败)?

joe*_*oer 9

如果 Homebrew 包不存在,我想安装它,否则升级它,最好的解决方案是使用Homebrew Bundle,它是 Homebrew 家族的正式成员。如果这对您不起作用,并且您想推出自己的解决方案,则应参考以下建议。

除了brew install已经安装的软件包之外,还有其他可能失败的情况。我不确定,但看起来该brew install命令不会发出除1失败以外的退出状态,因此您有两个选择:

  1. 搜索stderr“未安装”并检查
  2. 使用不同的方法

我见过用于此目的的最常见方法是检查软件包是否使用以下命令安装brew ls --versions

function install_or_upgrade {
    if brew ls --versions "$1" >/dev/null; then
        HOMEBREW_NO_AUTO_UPDATE=1 brew upgrade "$1"
    else
        HOMEBREW_NO_AUTO_UPDATE=1 brew install "$1"
    fi
}
Run Code Online (Sandbox Code Playgroud)

HOMEBREW_NO_AUTO_UPDATE=1如果您要安装多个软件包,您将需要使用,以便 Homebrew 不会在每次安装/升级之间尝试更新。