Mac OS X は $PATH の値をどのように設定しますか?

Mac OS X は $PATH の値をどのように設定しますか?

$PATHの設定方法については基本的なことは理解していますが、Mac OSがどこから取得するかを完全に説明したドキュメントはありますか?全て$PATH に追加されるパスは何ですか? 、、など/etc/profileは知っていますが、最終的に $PATH の値に影響を与える他のスクリプトはありますか? また、非ログイン シェルとログイン シェル ( 、 )の違いにはあまり詳しくありませんが、基本的な違いは認識しています。/etc/paths/etc/profile.d.bashrc.bash_profile

答え1

通常、PATHはシェルによって設定されます。Bashの場合、すべてがマニュアルで説明されている. 開いman bashてその部分にスキップすることもできますINVOCATION

対話型ログインシェルとして、または--loginで呼び出されます

Bash が対話型ログイン シェルとして呼び出されるか、--login オプション付きの非対話型シェルとして呼び出されると、まず /etc/profile ファイルが存在する場合はそこからコマンドを読み取って実行します。そのファイルを読み取った後、~/.bash_profile、~/.bash_login、~/.profile をこの順序で検索し、最初に存在し読み取り可能なファイルからコマンドを読み取って実行します。

対話型の非ログインシェルとして呼び出される

ログインシェルではない対話型シェルが起動されると、Bashは~/.bashrcファイルが存在する場合はそこからコマンドを読み込んで実行します。OS Xではさらに、path_helperの内容を読み取り/etc/paths.d、パスに追加します。

ここで重要なのは、OS Xではターミナルがデフォルトでログインシェルを開くのに対し、Linuxではシェルは通常非ログインシェルとして起動されるということです。Josh Staigerはログインシェルと非ログインシェルのわかりやすい説明

したがって、パスを設定できるのは基本的に次の 2 つと 3 つだけです。

  • /etc/profile(呼び出しpath_helper
  • /etc/pathsおよび/etc/paths.d(から呼び出されるpath_helper
  • シェル設定ファイル ( .bash_profile)

答え2

およびのパスは/etc/paths/etc/paths.d/*通常、PATHパスヘルパー.path_helperは から実行される/etc/profileため、bash が対話型ログイン シェルとして呼び出されたときには実行されますが、bash が非ログイン シェルまたは非対話型シェルとして呼び出されたときには実行されません。

/etc/paths/usr/local/binデフォルトでは末尾に含まれ、/etc/paths.d/デフォルトでは空です。

ターミナルと iTerm 2 は、デフォルトで新しいシェルをログイン シェルとして開きます。また、コンピューターに ssh で接続したときに開かれるシェルもログイン シェルです。tmuxただし、他のプラットフォームの多くのターミナル エミュレーター、、および Emacs のシェル モードでは、新しいシェルが非ログイン シェルとして開きます。

この行を追加しました/etc/launchd.conf:

setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin

ルート launchd プロセスの値を変更します。この値は、ユーザーごとの launchd プロセスを含む他のすべてのプロセスに継承されます。再起動するか、プロセスを実行して再起動することで、PATH変更を適用できます。/etc/launchd.conflaunchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf

OS X では、~/.profileグラフィカルにログインするときには読み込まれません。~/.bash_profileと の両方が~/.profile存在する場合、bash はどちらも読み取りません~/.profile

~/.MacOSX/environment.plist10.8 では動作しなくなりました。

関連情報