概要
プログラミングの学習を始めた頃、Ruby on Railsの環境構築において、command not found
にたびたび遭遇しました。
色々な記事を参考にして、その通りにやってみるのですが、なかなか解決できません。
理解すれば簡単なのですが、理解までに時間が掛かりました。
その経験を生かして、わかりやすく解決の手順を紹介します。
解決ポイント
- 解決するためには、以下のポイントで確認します。
(1) コマンド実行ファイルがあるか?
(2) コマンドまでの検索パスが通っているか?
- この2つのポイントを押さえれば、解決は早いです。
手順
コマンド実行ファイルの検索
- まず
command not found
が出た時は、コマンドの実行ファイルがどこにあるか確認します。 - rbenvを例にします。
$ which -a rbenv
- すると以下のように表示されました。
rbenv () {
local command
command="$1"
if [ "$#" -gt 0 ]
then
shift
fi
case "$command" in
(rehash | shell) eval "$(rbenv "sh-$command" "$@")" ;;
(*) command rbenv "$command" "$@" ;;
esac
}
/usr/local/opt/rbenv/bin/rbenv
/usr/local/bin/rbenv
- ここで表示されている以下の場所にコマンド実行ファイルがあるということです。
/usr/local/opt/rbenv/bin/rbenv
/usr/local/bin/rbenv
- もし以下のように表示された場合、rbenvの実行ファイルがそもそもないということになります。
$ which -a rbenv
rbenv not found
- この場合は、まずrbenvをインストールします。
$ brew install rbenv
実行したいコマンドまで検索パスが通っているか確認
- コマンド実行ファイルがあったとしても、そのコマンドを実行する検索パスが通っていなければ、
command not found
になります。 - 検索パスは以下のコマンドで確認します。
$ echo $PATH
/usr/local/opt/rbenv/shims:/usr/local/opt/rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
- ここで色々と表示されますが、実際にはコンマで区切られており、わかりやすく表示すると以下と同じ意味です。
- この検索パスを順番に検索して見つかったら実行します。
/usr/local/opt/rbenv/shims
/usr/local/opt/rbenv/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/opt/X11/bin
- この場合、rbenvの実行ファイルへの検索パスは通っているので、コマンドを実行することができます。
/usr/local/opt/rbenv/bin
/usr/local/bin
- もし検索パスが通っていない場合は、それを設定する必要があります。
検索パスを通す
- それでは検索パスを通す方法を紹介します。
検索パスは、シェルで設定
- 検索パスはどこに設定するかというと、シェルです。
- シェルはbashやzshといったもので、Macの標準だとbashになります。
- それではrbenvを例にbash_profileに設定します。
$ vim ~/.bash_profile
# /Users/user_name/.rbenv/binに検索パスを通す
export PATH="$HOME/.rbenv/bin:$PATH"
# rbenvの初期化
eval "$(rbenv init -)"
- 保存した後、設定を反映します。
$ source ~/.bash_profile
- 検索パスを確認します。
$ echo $PATH
/Users/test_user/.rbenv/shims:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin
※ わかりやすく表示すると、
/Users/test_user/.rbenv/shims
/usr/local/bin
/usr/bin:/bin
/usr/sbin
/sbin
/opt/X11/bin
- rbenvまでの検索パスが通るようになりました。
- これでrbenvのコマンドが実行できるようになります。
以上がrbenvを例にして、command not found
を解決する方法です。
総括
今回は、rbenvを例にして command not found
の解決する方法を見ました。
もちろん色々なコマンドで発生する可能性があるので、上記の内容だけですべて解決できるわけではありません。
しかし、以下の2点を押さえておけば、原因がすぐに見つかりやすいです。
(1) コマンド実行ファイルがあるか?
(2) コマンドまでの検索パスが通っているか?
この記事がエラーの解決に貢献できたら、嬉しいです。