回答:
通常、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/profile
ほとんど(すべて?100%ではないことを確認)シェルによって使用されます。そのため、PATHなど、必要な場所に配置することをお勧めします。Bashは.bash_
ファイルを読み取りますが、たとえばZsh .zshrc
は他のものに加えて読み取ります。それはシェルに依存します。
path_helper
されていないインタラクティブな非ログインシェル(や非対話型シェル)のために呼ばれます。これは、/etc/profile
実際には、対話型ログインシェルに対して呼び出されます。
/etc/paths
およびのパス/etc/paths.d/*
は通常PATH
、path_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
PATH
root launchdプロセスの値を変更します。この値は、ユーザーごとのlaunchdプロセスを含む、他のすべてのプロセスによって継承されます。に変更を適用するには/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で動作を停止しました。
/etc/profile
は、主にbashで使用されるスクリプトであることを意味しますか?他のシェルでの経験はありませんが、別のシェルに従っていると思いますか?