シェルと環境変数とパスについて

概要

会社の先輩にシェルのパスの通し方について教えて頂いた。

より理解を深めるために自分でも調べてまとめた。

教わったこと

  • コマンドを実行する=シェルがパスを使って実行ファイルを検索し、見つかったら実行する
  • which <コマンド名>でそのコマンドに通っているパスがわかる
  • シェルの設定ファイルに記述することでコマンドにパスを通せる

疑問に思ったこと

  • 設定ファイルに記述していないコマンドにもパスが通っているのはなぜ?

調べてわかったこと

  • シェルは各種環境変数の中身に従って処理を行っている
  • シェルの設定ファイルでは、ターミナル立ち上げ時の各種環境変数を設定することができる
  • シェルはコマンド実行時、$PATHという環境変数に従ってディレクトリを検索し、該当した実行ファイルを実行している

検索パスについて

通っているパスの確認

  • PATHの中身はecho $PATHで確認できる。
% echo $PATH 
/Users/horimoto/.rbenv/shims:/Users/horimoto/.rbenv/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  • :は区切りを意味しており、上記で通っているパスは以下になる。
/Users/horimoto/.rbenv/shims
/Users/horimoto/.rbenv/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

パスの優先順位

  • シェルはコマンドの実行ファイルを探すとき、$PATHに入っているパスを左から順に検索する
  • 先にヒットしたファイルを実行する

疑問への回答

Q : 設定ファイルに記述していないコマンドにもパスが通っているのはなぜ?

A : デフォルトで$PATHに入っているパスがあるから