PATH を通すとは ?
ターミナル上でコマンドを打てば処理が行われます。業務・日常的に触れる cd
, vi
, mkdir
などなどです。ls
であればカレントディレクトリのファイル一覧を確認することができます。
ところが以下のようなエラー文が出ることがあります。新たに追加したライブラリ用のコマンドとかでですね。
-bash: ${コマンド名}: command not found
この command not found
は PATH が通っていないことを教えてくれています。
(そもそも、存在しないコマンドの可能性もあります。)
コマンド 1 つ 1 つは、実行ファイルによって処理が行われます。そのため、実行ファイルがある場所までの 道標を明示しなければコマンドは実行できなくなるのです。
つまり、 PATH を通すとは、コマンド実行ファイルを探しに行くパスを示してあげることです。
$ which ${コマンド名}
$PATH
はどこで示されているの ?
PATH は bash_profile
というファイルに書き込みます。
bash_profileはログイン時に 1 度実行されるファイルです。( terminal や iTerm などの起動時 )
$ echo$PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
$ printenv PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
# つまり 5 箇所
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
# 書き換えを含むなら$ vi ~/.bash_profile
# readonly なら$ less ~/.bash_profile
1 行でずらっと書かれていますが :
で PATH は区切られます。ですので現在 PATH が通っているのは 5 箇所になります。
この 5 箇所に関しては bash_profile に書かれていないくても PATH は通るみたいですが、実行ファイルを読み込めなくなったときは書き込む必要はありそうです。( Linux の標準コマンドだからかな ? )
$PATH
を通すには
bash_profileに、実行ファイルがあるディレクトリまでのパスを書き込む必要があります。bash_profile が存在しなければ新規で作成する必要があります。(touch
コマンドで作りましょう)
export PATH="${通したいパス}:$PATH"
$ vi ~/.bash_profile
# ファイル内に以下を書き込み保存# 末尾の $PAHT はこの export 以前の $PATH を指定export PATH="/usr/local/opt/mysql@5.7/bin:$PATH"
$ echo"export PATH=/usr/local/bin:$PATH">> ~/.bash_profile
bash_profile に書かれている export が複数ある場合は、最後の export が $PATH
の内容となります。ですので、$PATH
には
- 通したいパス
- これまでの $PATH
を書き込まなければいけません。
bash_profile
を更新して完了
書き換えが終わったら最後に、bash_profile を再読み込みすれば完了です。ターミナルを再起動するか、 source
コマンドで更新することで可能です。
source ~/.bash_profile
完了と思ったけど意図したコマンドの挙動でないとき
「PATH を通して bash_profile も更新して、さあコマンドを打ったぞ! ...あれ、おかしいな、挙動がおかしい。」
こんなことが時たまあります。ライブラリの version 違いとか。
原因は export の書き方にあります。通したパスには優先順位が存在します。
コマンドの実行ファイルがあるかどうかの検索は左から順に行われ、見つけた瞬間に後続のパスは検索されません。
ですので、挙動がおかしい場合は、同名の実行ファイル(コマンド)が手前のパス内にないか確認することで解決できます。
解決策は片方の実行ファイルを削除するなどで対応できます。(削除してはいけない実行ファイルの場合は他の策を考えます)
削除後はシンボリックリンクを書き換えます。