2013年1月31日木曜日

PATH環境変数の設定はどうなっている

PATH変数に定義するディレクトリの並びについて書きましたので、ターミナルにログインした時に、PATH変数がどのように設定されるのかについて書きたいと思います。一応、bashを使っている場合です。

大体、以下の流れになります。

  1. ターミナル.appが立ち上がる際にされる設定
  2. /etc/profileで行われる設定
  3. /etc/bashrcで行われる設定
  4. ユーザの~/.bash_profileで行われる設定
  5. ユーザの~/.bashrcで行われる設定

ターミナル.appが立ち上がる際にされる設定

ターミナル.appをDockなどから立ち上げる際に、launchd関係でPATH設定をしているとPATH環境変数が設定されます。他にもあるかもしれません。個人的には、bash本来の/etc/profile以降だけで設定される方が好きです。

/etc/launchd.conf - launchd経由で立ち上がるプロセスに適用されます。setenv PATH path_name1:path_name2:... のようにcsh系と似た記述で指定します。
launchd.plist - 使っていないのでわかりませんが、manをみるとEnvironmentVariables <dictionary of strings> で、XMLフォーマットでPATHを指定できそうです。対象は、launchd本体、Terminal.appなどでしょうか。

また、ターミナル.app自体の環境設定で特別なコマンドを指定しているとそこでPATHが指定される可能性もありますね。この場合は、あえて指定しているので問題ないと思いますが。

その後、ターミナルが立ち上がると、ウインドウが開きシェルが起動されます。デフォルトでは/usr/bin/login経由で、/bin/bashが立ち上がります(変更等していない場合)。以下にbashの場合を説明します。

/etc/profileで行われる設定

bashは、起動すると/etc/profileを実行します。デフォルトでは、その中でpath_helperが実行され、/etc/pathsに記述してあるディレクトリをPATHに設定します。その後、/etc/paths.dに記述してあるファイルをアルファベット順に読んで、中に記述してあるディレクトリをPATHに追加していきます。PATHの前の部分に挿入することはできないようです。paths.d内のファイル名が"-" (マイナス)等で始まる場合は、前の部分に付加できるなどの仕様になっているといいと思ったのですが。

/etc/profileの中から/etc/bashrcが実行されます。

/etc/bashrcで行われる設定

デフォルトでは/etc/bashrcでは、特にPATHの設定は行われていないようです。
次から、ユーザの~/.bash_profileが実行されます。

~/.bash_profileで行われる設定

.bash_profile以降は、ユーザがどのように書いたかに大きく依存しますので、あまり解説しても意味が無いかもしれません。ここでは私の場合を説明します。
私の.bash_profileでは、それ自身では細かい設定は行わず、.bashrc, .profileをそれぞれ呼び出しているだけです。

~/.bashrcで行われる設定

私は、ここでPATH変数の頭に~/bin, ~/local/bin、/usr/local系、/opt/local系を付加しています。また、PATHの最後にclamXavを追加しています。

~/.profileで行われる設定

私は、.profileは使っていませんでした。

この記事を書いていて、.bashrcにあまりよくない記述も見つかったので直したくなってきました。よさそうな修正ができたらこのブログにも書きたいと思います。

0 件のコメント:

コメントを投稿