Linuxとの親和性が高く、プログラミング、システム開発でよく利用されるMac(マック)。
開発時にTerminal(ターミナル)を使うことになるが、ターミナルでコマンドを実行した際に zsh: command not found
となる場合がある。
pyenv --version zsh: command not found: pyenv
コマンド対象となるプログラムをインストールしていなかったのならインストールすればいいが、コマンド対象のプログラムは存在していてもこのエラーが起こる場合は何が原因なのか。
今回はそんな問題を解決する為に、「Macで「zsh: command not found」が出る原因と対処法」を紹介する。
この記事を書いている人
記事を読むメリット
「zsh: command not found」が出る原因
「zsh: command not found」が出る原因は command not found
が示すようにコマンドが見つからないからだ。
実行したいプログラムが存在して、更に絶対パスで指定しているならまずこのエラーは起こらない。
このエラーが起こる場合は大抵絶対パスを指定しない短いコマンドで起こる。
短いコマンドを実行して「見つかりません」状態になる場合は、PATHが通っていないから。
PATHとは
PATHとは、コマンドを入力されたときに対応するプログラムを探しに行く先、「指定されたフォルダ」である。
意味がわからない・・・
その「とりあえず台所から持ってくる」というのがPATHの役割なのさ。
PATHの確認方法
PATHが通っているかどうかはターミナル上で env
と打って実行すると、環境変数一覧が表示されるので、その中のPATHに実行したいプログラムがあるフォルダが含まれていなければPATHが通っていないことになる。
PATHの指定方法
PATHの指定方法はMacというかUnix系だと export
コマンドを使う。
PATHという環境変数に追加したいフォルダをコロン :
区切りで指定することでPATHを指定できる。
export PATH="(追加したいフォルダ):$PATH"
しかしexportを実行しただけではターミナルを開いている間だけしか効果がない。
いつも使う場合は最初からPATHに追加されているのが望ましい。
その場合は .zprofile
にexportコマンドを追加しておくと良い。
.zprofile
はターミナルが開かれた瞬間(zshが実行された瞬間)に実行されるので、ここにexportコマンドを仕込んでおけば常に初手でexportコマンドが実行されるので、実行したいプログラムのあるフォルダにPATHが通った状態で作業することができる。
pyenvの例だと nano ~/.zprofile
で .zprofile
を開き、以下のコマンドを追加すると $HOME/.pyenv/bin
にあるpyenvを絶対パス指定せずに実行できるようになる。
export PYENV_ROOT="$HOME/.pyenv" export PATH="$PYENV_ROOT/bin:$PATH" eval "$(pyenv init -)"
.bash_profileでPATH設定したのに反映されない
「.bash_profile
や .bashrc
でPATH設定したのに反映されない」
こんな疑問もあるかもしれない。
これは実行しているシェルアプリが違うからである。
.bash_profile
はあくまでbash起動時に実行されるもので、zsh用は .zprofile
となる。
macOSはCatalinaから bash
ではなく zsh
を標準とするようになったので、zshを使うならbash用ではなくzsh用の設定が必要となる。
Qiitaなどの記事ではまだbashで設定するものが多いので、zshを使う場合は読み替えが必要なので注意。
もしくはターミナルで起動するシェルを zsh
ではなく bash
に変更するのも対処法の一つとなる。
Macで「zsh: command not found」が出る原因と対処法 まとめ
Macで「zsh: command not found」が出る原因は、実行したいプログラムがあるフォルダにPATHが通っていないから。
PATHを通すには .zprofile
を開いて、PATHを通すための export
コマンドを追記しよう。
.bash_profile
を使いたい場合はターミナルで使うシェルをzshからbashに切り替える。