MacOS X のパス設定は Leopard から path_helper を使うようになったらしい。Finder から起動するアプリケーションが使うパスは迷走中か。自前でパス設定をするものもある。
パス (path) とは,あるディレクトリを基準にして目的のディレクトリまでの道筋を表したものである。ここでは,実行可能なコマンドを検索するためのディレクトリのリストのことである。
動作環境は MacOS X 10.11 El Capitan である。
MacOS X のパス設定は,10.5 Leopard のときに現在の形になったらしい (Snow Leopard時代のパス管理術 - builder by ZDNet Japan)。パスを意識するのは,通常はターミナルでコマンドを入力する場合である。ターミナルで使うシェルの種類によってデフォルトのパス設定は異なる。
Bash であれば /etc/profile の次に ~/.bash_profile が読み込まれ,~/.bashrc が読み込まれる。パス設定は環境変数なので,グローバルには /etc/profile,個人用には ~/.bash_profile で設定することになる (本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita)。
Zsh であれば,グローバルには /etc/zprofile で,個人用に ~/.zprofile でパスを設定する。Zsh の設定ファイルはたくさんあって,zshenv → zprofile → zshrc → zshlogin にそれぞれグローバル用と個人用があり,この順番で交互に読み込まれるようだ (zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita)。
グローバル用のプロファイルにはパス設定がされていて,bash でも zsh でも path_helper コマンドが呼ばれるようになっている。path_helper コマンドは,/etc/paths と /etc/path.d/ 以下に置かれているファイルを順に読み込み,環境変数 PATH としてエクスポートする仕組み。したがって,アプリケーションが自分が探索するパス設定を追加したいときは,/etc/paths に直接書き込むのではなく,/etc/path.d/ の中にファイルを追加する方法がとられる。アプリケーションがどのパス設定をしているのかが分かりやすくなるし,安全な削除もできるからである。ただし,探索の順番が後ろになってしまうので優先順位が低くなってしまうという欠点がある。
path_helper のソースコードは公開されている (path_helper.c | Source Browser)。
Finder で GUI から起動したアプリケーションの場合は,MacOS のバージョンによって異なるようで,迷走している感がある。
MacOS X 10.7 Lion 以前は,~/.MacOSX/enviroment.plist (新・OS X ハッキング! (83) Mountain Lionで消えた「enviroment.plist」 | マイナビニュース)
MacOS X 10.8 Mountain Lion から 10.9 Maverics までは,グローバル /etc/launchd.conf 個人用 ~/.launchd.conf で行う (launchd.conf(5) Mac OS X Manual Page)。
MacOS X 10.10 Yosemite, 10.11 El Capitan は,~/Library/LaunchAgents/environment.plist となった (Setting environment variables via launchd.conf no longer works in OS X Yosemite/El Capitan? - Stack Overflow)。
これ以外にも独自の実装方法をとっているアプリケーションもある。例えば,Inkscape.app は,
/Applications/Inkscape.app/Contents/Resources/bin/inkscape が起動スクリプトになっていてこの中で PATH などの環境変数を設定し,最後に本体の実行ファイル /Applications/Inkscape.app/Contents/Resources/bin/inkscape-bin を呼び出している。
Master Archive Index
Total Entry Count: 1957