LoginSignup
0
0

More than 1 year has passed since last update.

M1 Mac/Intel Mac/Linux/WSLでhomebrewの.zshrc設定を共通化

Posted at

はじめに

Homebrewは、M1 Mac/Intel Mac/Linux(WSL)の3種類で、
インストール先のパスが違います。

.zshrcの設定をGitコミットして各マシンで共有してるときに、この違いが都合悪いので、自動判定できるようにしました。

結果

こんな感じ。

.zshrc
if [[ -d '/home/linuxbrew/.linuxbrew' ]]; then
 # Linux/WSL
 HOMEBREW_HOME='/home/linuxbrew/.linuxbrew'
elif [[ -d '/opt/homebrew' ]]; then
 # M1 Mac
 HOMEBREW_HOME='/opt/homebrew'
else
 # Intel Mac
 HOMEBREW_HOME='/usr/local'
fi
eval "$($HOMEBREW_HOME/bin/brew shellenv)"

めっちゃそのまんまですが、ディレクトリの存在チェックをして、しかるべきパスのbrewコマンドを叩きます。

Linux/M1 Macはどっちを先に判定しても良いんですけど、Intel Macは最後のelseに持ってきたほうが良い。/usr/localディレクトリは必ず存在しますからね。

余談: unameは使わないほうが良い

最初はunameコマンドでこんな風に書いてました。しかし、これだとM1 Macでうまく動かないことがあります。

.zshrc
if [[ `uname` == 'Linux' ]]; then
 # Linux/WSL
 HOMEBREW_HOME='/home/linuxbrew/.linuxbrew'
elif [[ `uname` == 'Darwin' && `uname -m` == 'arm64' ]]; then
 # M1 Mac
 HOMEBREW_HOME='/opt/homebrew'
else
 # Intel Mac
 HOMEBREW_HOME='/usr/local'
fi
eval "$($HOMEBREW_HOME/bin/brew shellenv)"

Macの場合、ターミナルアプリの「情報を見る」で、「Rosettaを使用して開く」のチェックを入れると、Rosettaを使ってIntelアーキテクチャとしてターミナルを開いてくれます。

CleanShot 2022-01-25 at 13.51.27@2x.png

Rosettaで開いた場合、uname -mの結果もarm64ではなくx86_64となり、Intel Mac判定となります。
しかしHomebrewのインストール先は同じマシンなので一緒なので、「/usr/local/bin/brewなんて見つからねーよ!」となるわけです。

CLIアプリもまだまだM1対応してないものは多いので、Rosettaを使うこともある場合は、素直に「インストール先ディレクトリが存在するか」でチェックしたほうが安全です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0