[小ネタ]LinuxでHomebrew(Linuxbrew)を使い始めたらPATH設定問題を解決してみた
はじめに
最近、vibe codingでdevcontainerを使い始めて、Linuxも使うようになりました。
普段はMacOSを使っていて、Homebrewにはかなりお世話になっています。「LinuxでもHomebrewが使える(Linuxbrew)」と聞いて、早速導入してみることにしました。
インストール自体は公式のコマンド一発で完了…と思いきや、インストール後に brew コマンドを叩いても command not found。
何が起きたか
Linuxbrewのインストールスクリプト(install.sh)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
を実行した後、brewコマンドを実行できなかったので、PATH 追加が必要だとわかりました。
ですが、関連ページ Homebrew on Linuxをみて、少し長い文章の後に三行のコマンドがありました。
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bashrc
素直な私は、とりあえず1行目の test -d ~/.linuxbrew ... を実行してみました。
…しかし、エラーが出ているように見えた。
そして brew コマンドを叩いても相変わらず command not found のまま。
「あれ、うまくいかないな?」と少し戸惑いましたが、実はこれ、コマンドの意味を理解していれば当たり前の挙動だったんです。
原因と仕組み
結論から言うと、私の環境ではLinuxbrewがデフォルトの /home/linuxbrew/.linuxbrew にインストールされていた のですが、私が実行したのは 「ホームディレクトリ(~/.linuxbrew)にあるかチェックするコマンド」 だったからです。
提示されたコマンドを分解して解説します。
1. test -d は無言
test -d ~/.linuxbrew
このコマンドは「ディレクトリが存在するか」をチェックします。重要なのは、結果を標準出力には出さず、終了ステータス(Exit Code)だけで判定する という点です。
- 存在すれば
True(0) - 存在しなければ
False(1)
画面には何も表示されないので、初心者には「無視された?」ように見えてしまいます。
2. && の挙動
test -d ... && eval ...
&& は「左側のコマンドが成功したら、右側のコマンドを実行する」という意味です。
私の環境には ~/.linuxbrew がなかったので、左側の test コマンドが False を返し、右側の eval(PATHを通す処理)はスキップされました。
つまり、文字通り「何も起きなかった」わけです。
正しい解決手順
というわけで、コピペで済ませずに「自分の環境がどうなっているか」を確認しながら進めるのが正解でした。手順を整理します。
1. インストール先の確認
まずは brew のバイナリがどこにあるか ls で確認します。だいたい以下の2パターンのどちらかです。
# パターンA: root的な場所
ls /home/linuxbrew/.linuxbrew/bin/brew
# パターンB: ユーザーのホームディレクトリ
ls ~/.linuxbrew/bin/brew
私の場合は /home/linuxbrew/.linuxbrew/bin/brew にありました。
2. 現在のシェルにPATHを通す
インストール先がわかったので、対応する方のコマンドを実行します。
今回は /home/linuxbrew/... の方だったので、2行目のコマンドを実行します。
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
これを実行した後、brew --prefix を叩いてパスが返ってくれば成功です!
root@c8e110b8ebd7:/workspaces/test-project# brew --prefix
/home/linuxbrew/.linuxbrew
3. 設定を永続化する(.bashrcへの追記)
今のままだとシェルを閉じたら設定が消えてしまうので、.bashrc に設定を書き込みます。
ここで注意なのが、必ず brew コマンドが通るようになった状態で実行すること です。
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bashrc
このコマンドの中にある $(brew --prefix) は、現在認識されているbrewのパスを展開してくれます。これのおかげで、.bashrc には正しいパスが書き込まれます。
4. 動作確認
最後に、実際にパッケージをインストールできるか試してみましょう。
brew install hello
✔︎ JSON API cask.jws.json [Downloaded 15.0MB/ 15.0MB]
✔︎ JSON API formula.jws.json [Downloaded 31.7MB/ 31.7MB]
==> Fetching downloads for: hello
✔︎ Bottle Manifest hello (2.12.2) [Downloaded 11.7KB/ 11.7KB]
✔︎ Bottle hello (2.12.2) [Downloaded 98.6KB/ 98.6KB]
==> Pouring hello--2.12.2.arm64_linux.bottle.tar.gz
🍺 /home/linuxbrew/.linuxbrew/Cellar/hello/2.12.2: 57 files, 398.7KB
==> Running `brew cleanup hello`...
Disable this behaviour by setting `HOMEBREW_NO_INSTALL_CLEANUP=1`.
Hide these hints with `HOMEBREW_NO_ENV_HINTS=1` (see `man brew`).
無事インストールできました!
Summary
test -dコマンドはディレクトリがないと「無言でスキップ」するので、何も起きていないように見える。- 公式のNext stepsは「ユーザーのホーム」か「システムのホーム」か、あらゆる環境に対応するために列挙されているだけ。全部実行すればいいわけじゃない。
- devcontainerなど、環境によってインストール先が変わることがあるので、まずは
lsで実体を確認するのがよい。
Linuxやdevcontainer周り、まだまだ奥が深いですが、こうやって一つずつ挙動を理解していくのは楽しいですね。
同じような罠にハマった人の助けになれば幸いです。







