2017-04-25 98 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