
$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.conf
launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
OS X では、~/.profile
グラフィカルにログインするときには読み込まれません。~/.bash_profile
と の両方が~/.profile
存在する場合、bash はどちらも読み取りません~/.profile
。
~/.MacOSX/environment.plist
10.8 では動作しなくなりました。