macにbrewなどで新しいアプリ(rbenv等)をインストールする時、あまり良く考えずにそのアプリのコマンドのPATHを通していましたが、「そもそもコマンドのPATHを通すってどういうことか」を調べてみました。
#PATHとは?
以下、開発環境はMacです。
PATHとは環境変数のひとつ。
環境変数とは、マシンの中のメモ帳みたいなもの。
コンソール(ターミナル)のどこからでも参照することができるメモ帳。
その中でもPATH(環境変数)は実行ファイル(アプリケーション)の格納場所をメモしたもの。
#コマンドとは?
実行ファイル(アプリケーション)のこと。
/bin/ls
ls
上記は同じ効果を持つ。
例えばls
というコマンドの実行ファイルは/binディレクトリに格納されており、/bin/ls
と入力するとアプリケーションが実行される。/bin
をPATHに設定(通して)いれば、上記のようにフルパス/bin/ls
を指定せずともls
だけ入力しすれば/bin/ls
と同じ実行がされる。
このように、コマンド(lsなどの実行ファイル)入力時にシェル(bashやzsh等)が実際に実行ファイルを探しに行く際に参照するところをPATHと言う。
#どんなPATHが設定されているか確認する方法
PATHは環境変数$PATHに設定されており、echo $PATH
で確認できる。
$echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin... #実行結果
縦に並べると、、
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/sbin
...
上記だと、usr/local/bin
やusr/bin
以下にあるアプリは省略コマンド(ls
等)でコマンドを実行できる(PATHが通っている状態)
#実行ファイル(アプリケーション)の場所の確認方法
which
で、指定したコマンドの実行ファイルがどこに格納されているのか確認できる。
たとえばls
はどこのパスにあるかというと、
$which ls
/bin/ls #実行結果
/bin/
以下にあることがわかる。
そして/bin/
はPATHに登録してあるので、bin/ls
はls
で動く。
#目的とする実行ファイルが複数の違う場所にある場合
先に見つかった方を実行する。
PATHには優先度があり、echo $PATH
で出力された左が優先される。
そのため、/usr/local/bin/ls
と/usr/bin/ls
のような同じ名前の実行ファイルが
存在する場合、/usr/local/bin/ls
が実行される。
#PATHの通し方
PATHを通すにはホームディレクトリ直下にある設定ファイル.bash_profileに通したいPATHを記入する必要がある。
###.bash_profileを作成してvim等で編集する。
vi ~/.bash_profile
###もしくは、下記のコマンドを実行する
解説)$echo 'export PATH=/通したい/パス:$PATH' >> .bash_profile
例)$echo 'export PATH=/usr/hoge:$PATH' >> .bash_profile
#環境変数PATHを書き換えた後、有効にする
shellを更新する。
$source ~/.bash_profile
※うまくいかない場合があるのでその時はターミナルを再起動してください
PATHが通っているか確認。
$echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin.../user/hoge#追加されていればOK
##以上です。