web-dev-qa-db-ja.com

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

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

11
Psycho Punch

通常、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/profilepath_helperを呼び出します)
  • /etc/pathsおよび/etc/paths.dpath_helperから呼び出されます)
  • シェル構成ファイル(.bash_profile
9
slhck

_/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で動作を停止しました。

8
Lri