$ PATHの設定方法について基本的な理解はありますが、Mac OSがどこで取得するかを完全に説明しているドキュメントはありますかall $ PATHに追加されるパスはありますか? /etc/profile
、/etc/paths
、/etc/profile.d
のようなものを知っていますが、最終的に$ PATHの値に影響を与える他のスクリプトはありますか?また、非ログインシェルとログインシェル(.bashrc
、.bash_profile
)についてはあまり詳しくありませんが、基本的な違いはわかっています。
通常、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つだけです。
/etc/profile
(path_helper
を呼び出します)/etc/paths
および/etc/paths.d
(path_helper
から呼び出されます).bash_profile
)_/etc/paths
_および_/etc/paths.d/*
_のパスは、通常、 path_helper によってPATH
に追加されます。 _path_helper
_は_/etc/profile
_から実行されるため、bashが対話型ログインシェルとして呼び出されたときに実行されますが、bashが非ログインシェルまたは非対話型シェルとして呼び出されたときは実行されません。
_/etc/paths
_には、デフォルトで最後に_/usr/local/bin
_が含まれ、_/etc/paths.d/
_はデフォルトで空です。
ターミナルとiTerm2は、デフォルトでログインシェルとして新しいシェルを開きます。コンピューターに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プロセスのPATH
の値を変更します。この値は、ユーザーごとに起動されたプロセスを含む、他のすべてのプロセスに継承されます。 _/etc/launchd.conf
_に変更を適用するには、再起動するか、_launchctl < /etc/launchd.conf; Sudo launchctl < /etc/launchd.conf
_を実行してプロセスを再起動します。
OS Xでは、グラフィカルにログインしても_~/.profile
_は読み取られません。 _~/.bash_profile
_と_~/.profile
_の両方が存在する場合、bashは_~/.profile
_も読み取りません。
_~/.MacOSX/environment.plist
_は10.8で動作を停止しました。