linux - .bashrcでexportしたPATHが/procにあるプロセスファイルの環境変数(PATH)と一致しないように見える - スタック・オーバーフロー
Ubunt 15.04 を使っています。 どういう際に利用するかは措いておくとして、 /proc にある各プロセスIDの名前がついたディレクトリにある、 environ というファイルを、プログラミン...
http://ja.stackoverflow.com/q/19984/440
回答の中で答えられている通り、/proc/$$/environ
(/proc/self/environ
)は、プログラム起動時の環境変数だけが表示される。プロセスが起動中に設定した環境変数は表示されない。
なんとかして取れないかなーと思って以下のスクリプトを書いた。
#!/bin/bash
if [ "x$2" == "x" ]; then
GREP=cat
else
GREP="grep ^$2="
fi
gdb -q --silent -p $1 <<EOF | grep XXXXXXX | cut -c9- | $GREP
set \$i=0
while (1)
set \$r=*((char**)environ+\$i)
if (\$r == 0)
loop_break
end
printf "\\nXXXXXXX %s\\n", \$r
set \$i++
end
EOF
これにプロセスIDを指定して起動すると
動的に設定された環境変数の値が取れる(第二引数に環境変数名を指定してもok)。仕組みはコードを見ると分かるが、environ のポインタをずらしながら値を表示する gdb スクリプトを実行してる。
ただしこの方法は、あくまで setenv(3) を使って environ を更新するプログラムに限られる。例えば bash のあるバージョンでは environ を更新しないらしく、このスクリプトを持っても環境変数が取れなかった。言語処理系の中には環境変数は自プロセスには反映せず子プロセスの起動時のみ使用する物もあるので、そういった場合には使用出来ない。