2017-04-25 63 views
1

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

我目前使用的是这样的:

brew update 
brew install FORMULA || (brew upgrade FORMULA && brew cleanup FORMULA) 

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

回答

1

我想要安装一个自制软件包,如果它尚不存在,并升级它,否则,最好的解决方案是使用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 
} 

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