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


11

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

回答:


9

通常、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

簡潔で有益な回答をありがとう。そのため、どのスクリプト/アーティファクトが$ PATHに影響するのか、私は理解していると思います。これ/etc/profileは、主にbashで使用されるスクリプトであることを意味しますか?他のシェルでの経験はありませんが、別のシェルに従っていると思いますか?
サイコパンチ

/etc/profileほとんど(すべて?100%ではないことを確認)シェルによって使用されます。そのため、PATHなど、必要な場所に配置することをお勧めします。Bashは.bash_ファイルを読み取りますが、たとえばZsh .zshrcは他のものに加えて読み取ります。それはシェルに依存します。
slhck 2013年

「さらに、OS Xには、/ etc / paths.dの内容を読み取り、それをパスに追加するpath_helperがあります。」いいえ、path_helperされていないインタラクティブな非ログインシェル(や非対話型シェル)のために呼ばれます。これは、/etc/profile実際には、対話型ログインシェルに対して呼び出されます。
Maggyero

8

/etc/pathsおよびのパス/etc/paths.d/*は通常PATHpath_helperによって追加されます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

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

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

~/.MacOSX/environment.plist 10.8で動作を停止しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.