bashシェルのpidを見つけました
$ echo $$
7791
次に、2 つの異なる方法で環境変数を確認します。
$ cat /proc/7791/environ | tr '\0' '\n'
からhttps://stackoverflow.com/a/532284/156458、 そして
$ env
しかし、それらの出力は同一ではありません。たとえば、 の異なる値が表示されますPATH
。なぜ異なるのでしょうか? ありがとうございます。
答え1
誤解を招くような回答の下のコメントを読むべきです。
/proc/$PID/environ
シェルによって実際に使用されるわけではありません。単にプロセスが起動されたときの初期環境を表すだけです。
シェル内で実行されるすべての操作 (init スクリプトを含む) は、proc
表示しているエントリを変更することなく、シェル内からこれらの値を変更することができます。
答え2
/proc/7791/environ
execve システム コールを使用してプロセスが開始されたときにプロセスが受け取ったシェルの元の環境を表示します。
int execve(const char *filename, char *const argv[], char *const envp[]);
シェルの実行中、たとえば を評価することによって、エクスポートされた変数のセットを変更できます。この新しいセットは、プログラムの起動時に.bashrc
ベクトルに渡されます。envp
env
答え3
どのような問題を解決しようとしている場合でも、
/proc/self
解決します。シェルの初期環境を取得する代わりに、
cat /proc/self/environ
コマンドの環境を表示しますcat
。これは、コマンドが実行されているシェルの現在の環境と同じである必要があります。