如何实施brew配方的安装或升级?

问题描述:

我想安装一个brew配方,或者在已经使用bash安装的情况下升级它。如何实施brew配方的安装或升级?

该命令应该返回一个非零的退出代码,只要在最后的配方没有安装。

PS。如果已经安装xxx,应该注意brew install xxx返回错误代码。

+0

相关http://stackoverflow.com/questions/20802320/detect-if-homebrew-package-is-installed – sobolevn

背景:https://github.com/Homebrew/legacy-homebrew/issues/30939

我只需要这也。这似乎工作。

#!/usr/bin/env bash 

package=$1 
pkg_installed=false 
pkg_updated=false 
verbose=true 

# TODO: ensure valid input 

brew update >/dev/null 2>&1 
list_output=`brew list | grep $package` 
outdated_output=`brew outdated | grep $package` 

# now enable error checking 
set -e 

if [[ ! -z "$list_output" ]]; then 
    pkg_installed=true 
    $verbose && echo "package is installed" 
    if [[ -z "$outdated_output" ]]; then 
     pkg_updated=true 
     $verbose && echo "package is updated" 
    else 
     $verbose && echo "package is not updated. updating..." 
     brew upgrade $package 
    fi 
else 
    $verbose && echo "package is not installed. installing..." 
    brew install $package 
fi 

用法:

> brew outdated 
jemalloc (4.3.0) < 4.3.1 
terraform (0.7.9) < 0.7.10 
> brew_install_or_upgrade.sh jemalloc; echo $? 
package is installed 
package is not updated. updating... 
==> Upgrading 1 outdated package, with result: 
jemalloc 4.3.1 
==> Upgrading jemalloc 
==> Downloading https://homebrew.bintray.com/bottles/jemalloc-4.3.1.el_capitan.bottle.tar.gz 
######################################################################## 100.0% 
==> Pouring jemalloc-4.3.1.el_capitan.bottle.tar.gz 
    /usr/local/Cellar/jemalloc/4.3.1: 16 files, 1.4M 
0 
> brew_install_or_upgrade.sh jemalloc; echo $? 
package is installed 
package is updated 
0 
>