Homebrew的多版本(x86和arm)自动切换方案

arm架构的mac电脑已经趋于成熟的今天,为什么还要开历史倒车安装x86版本的Homebrew

正常场景肯定不需要,但是实在是有一些软件不用不行,比如game-porting-toolkit,本身就是用来运行Windows游戏的,必须使用x86兼容模式。

安装 Rosetta

如果已经安装过Rosetta,请跳过这一步。

Rosetta 2是一个必要条件,在终端执行安装:

softwareupdate --install-rosetta

安装x86版本Homebrew

arch -x86_64 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

和普通命令的区别是开头加了arch -x86_64,用来标记通过兼容模式运行安装脚本。这样安装之后的才是x86版本。

接下来检查安装是否正确,在终端执行:

which brew

如果看到如下内容才说明安装完成:

/usr/local/bin/brew

安装arm版Homebrew

如果通过默认脚本安装过Homebrew,则可以跳过本步骤。

/bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)"

实现共存

方案1

这个方案的特点是:需要进入x86兼容模式,即在终端设置环境变量:arch

首先,写入切换脚本,仅需要执行一次:

cat << 'EOF' >> ~/.zshrc
if [ "$(arch)" = "arm64" ]; then
    eval "$(/opt/homebrew/bin/brew shellenv)"
else
    eval "$(/usr/local/bin/brew shellenv)"
fi
EOF

# 生效
source ~/.zshrc

后续使用时仅需要设置arch,请注意arm版本的Homebrew不需要额外设置,终端打开后就是了。

想进入x86模式,请执行:

arch -x86_64 zsh

注意,设置之后在关闭终端之前是一直有效的,关闭终端即退出

方案2

既然我们安装了两个版本的Homebrew,但是只有一个brew能生效的话,我们是不是可以设置两个命令呢?

答案当然是肯定的,我们可以把abrew分配成arm版本的Homebrewibrew定义为x86版本的命令。

写入别名脚本,同样也只需要设置一次:

cat << 'EOF' >> ~/.zshrc
alias abrew='arch -arm64 /opt/homebrew/bin/brew'
alias ibrew='arch -x86_64 /usr/local/bin/brew'
EOF

# 生效
source ~/.zshrc

使用的时候按需执行即可:

  • abrewarm
  • ibrewx86

举个栗子,本来命令是:brew install some-package,我们如果要以x86版本执行,则使用ibrew install some-package,如果是arm,则是abrew install some-package

简而言之就是用abrew或者ibrew替换原本的brew

0 条评论