VSCodeのWSLターミナルでbrewが使えないときの対処方法
困ったこと
VSCodeでwslのターミナルを起動したときに、brewと、brewで入れたコマンドが使えない。
以下のようにコマンドが見つからないといわれてしまう。
$ brew
Command 'brew' not found, did you mean:
command 'brec' from deb bplay (0.991-10build1)
command 'qbrew' from deb qbrew (0.4.1-8build1)
Try: sudo apt install <deb name>
- brew経由でインストールしたコマンドも同様に見つからない。(以下はkubectlの場合)
$ kubectl
kubectl: command not found
- 一方で、windows terminalからwslを実行した場合にはbrewコマンドと、brew経由でインストールしたコマンドが実行できる。
解決方法
- 以下のコマンドで、
~/.profile
ではなく~/.bashrc
にbrewのパスを書く。- zshの場合は
~/.bashrc
->~/.zshrc
に置き換えて実行してください。
- zshの場合は
$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> ~/.bashrc
どうしてbrewが使えなかったのか
そもそもlinuxbrewってなに?
mac OSで使用できるパッケージマネージャであるhomebrewには、linuxbrewというlinux向けのバージョンが存在します。
-
wslでも以下のページに従ってインストールすることで使用できます。
macOSと同じターミナル環境をlinuxサーバーやwslでも作りたいとき、aptやyumレポジトリが存在せずbrewでしか提供されていないコマンドをインストールしたいときに便利です。
状況の確認
- 冒頭でも書いたように、VSCode上でwslのターミナルを開いたときにはbrew関連のコマンドが実行できません。
一方で、Windows TerminalやWSLの標準のターミナル(WindowsのスタートメニューからUbuntuを実行したときに開かれるもの)ではbrewコマンドが実行できます。
VSCodeのターミナルの場合
$ brew
Command 'brew' not found, did you mean:
command 'brec' from deb bplay (0.991-10build1)
command 'qbrew' from deb qbrew (0.4.1-8build1)
Try: sudo apt install <deb name>
- それ以外の場合
$ brew
Example usage:
brew search TEXT|/REGEX/
brew info [FORMULA|CASK...]
brew install FORMULA|CASK...
brew update
brew upgrade [FORMULA|CASK...]
...
パスの比較
たぶんPATHが通ってないんだろう、ということで両者でPATHを比較してみます。
以下のコマンドをVSCode側で実行
$ echo ${PATH//:/\\n} > VSCode.txt
- 次はWindows Terminal側でこのコマンドを実行
$ echo ${PATH//:/\\n} > WinTerminal.txt
- 両者をdiffコマンドで比べてみると、VSCodeのターミナルにはやはりbrewのパスが存在しません。
- ということで、これはパスが通っていないのが原因みたいです。
diff WinTerminal.txt VSCode.txt
2,3d1
< /home/linuxbrew/.linuxbrew/bin
< /home/linuxbrew/.linuxbrew/sbin
解決
- linuxbrewのパスは
.profile
に書かれています。これはlinuxbrewのインストール時に以下のコマンドを実行して.profile
にパスを書くように指示されるためです。
$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> ~/.profile
-
自分のターミナル環境では
.profile
にはlinuxbrewのパスしか書かれていませんでした。- 先ほどのパスの比較ではlinuxbrewのパスだけが抜けていたので、どうやら
.profile
にパスが書かれていることが問題のようです。
- 先ほどのパスの比較ではlinuxbrewのパスだけが抜けていたので、どうやら
ということで、
.profile
ではなく.bashrc
にlinuxbrewのパスを書いてみたところ、VSCodeでもbrewが実行できるようになりました。
$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> ~/.bashrc
.profile
と.bashrc
について
-
.profile
と.bashrc
はどちらもコマンドのパスやターミナル起動時に実行したいコマンドを記述しておくファイルです。 どうして
.profile
と.bashrc
で違いがでるのか、それは両者の読み込まれるタイミングの違いにあります。-
以下の記事にあるように、
.profile
はログイン時に実行されるの対して、.bashrc
はbashが起動するたびに実行されます。 -
おそらく、VSCodeのターミナルではログイン処理が実行されない(?)のが原因で
.profile
が読み込まれないのではないでしょうか。- (注意)完全に推測です。
zshの場合
- zshの場合は
.zprofile
ではなく、.zshrc
にlinuxbrewのパスを書き込む必要があります。
$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >> ~/.zshrc
検証環境
- OS: windows10(21H1)
- VSCode: Version 1.58.2 (June 2021)
- WSL: ubuntu 20.04, WSL2
- Windows Terminal:
- Shell:
- zsh(linuxbrewでインストールしたもの)
- bash(ubuntuに標準でインストールされたもの)
Author And Source
この問題について(VSCodeのWSLターミナルでbrewが使えないときの対処方法), 我々は、より多くの情報をここで見つけました https://qiita.com/gengen16k/items/bcda7320e9b60418928e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .