印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Mac MacOS X のパス設定はどうなっているのか

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 の場合

Bash であれば /etc/profile の次に ~/.bash_profile が読み込まれ,~/.bashrc が読み込まれる。パス設定は環境変数なので,グローバルには /etc/profile,個人用には ~/.bash_profile で設定することになる (本当に正しい .bashrc と .bash_profile の使ひ分け - Qiita)。

Zsh の場合

Zsh であれば,グローバルには /etc/zprofile で,個人用に ~/.zprofile でパスを設定する。Zsh の設定ファイルはたくさんあって,zshenv → zprofile → zshrc → zshlogin にそれぞれグローバル用と個人用があり,この順番で交互に読み込まれるようだ (zshの設定ファイルの読み込み順序と使い方Tipsまとめ - Qiita)。

path_helper

グローバル用のプロファイルにはパス設定がされていて,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 から起動したアプリケーションの場合

一般的な動作

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 を呼び出している。

Posted by n at 2016-02-04 20:01 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?