.bashrcでexportしたPATHが/procにあるプロセスファイルの環境変数(PATH)と一致しないように見える
Ubunt 15.04を使っています。
どういう際に利用するかは措いておくとして、/procにある各プロセスIDの名前がついたディレクトリにある、environというファイルを、プログラミング時の環境変数取得に利用できないかと思いました。
そこで、例えば、gnome端末エミュレータから起動したシェルのPATHであれば次のように取得できることを確認しました。
$echo $$
3009
$ tr '\000' '\012' < /proc/3009/environ | grep ^PATH
PATH=/home/cul8er/bin:/home/cul8er/.gem/ruby/2.1.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
念の為、実際にPATHをechoで表示させました。
$ echo $PATH
/home/cul8er/jdk1.8.0_60/bin:/home/cul8er/bin:/home/cul8er/.gem/ruby/2.1.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
/home/cul8er/jdk1.8.0_60/binが加わっています。つまり、/procの情報と異なっています。
調べると、過去にnetbeansを使うためにインストールしたjavaを使えるよう.bashrcでPATHを設定していました。
-- /home/cul8er/.bashrc --
export JAVA_HOME=$HOME/jdk1.8.0_60
export PATH=$JAVA_HOME/bin:$PATH
.profileでもrubyを実行するためにPATH情報の変更がされていました。(なんでこういう違いを作ったのかは思いだせません…)
-- /home/cul8er/.profile
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$HOME/.gem/ruby/2.1.0/bin:$PATH"
fi
.profile内で.コマンドを使って.bashrcを呼び出している点に加えて、通例言われているところであれば、.profileもログインシェルから.コマンドで実行されるはずなので、.bashrcで変数をexportすれば問題なくログインシェルの環境変数として使えるはずですし、実際echoの表示がそれを裏付けているように思えます。
カレントシェルがログインシェルでなくてもサブシェルなら.bashrcは起動されるはずですからなおさらです。
それが/proc以下のenvironファイルでは.profileでの設定しか含まれていません。
man procでオンラインヘルプを読むと以下の記述しか見つけられませんでした。
/proc/[pid]/environ このファイルはプロセスの環境変数を含んでいる。 各エントリはヌルバイト ('\0')
で区切られていて、 末尾にヌルバイトがあるかもしれない。
こういうものだと現実から理解するのも悪くないですが、単純に自分が無知なままでプログラミングすると後に無用な苦労をすることも多々ありますので、.bashrcでの設定が生かされない理由を、分かるものなら知りたいです。
ヒントでもいいのでご教示おねがいします。