私のbashシェルのpidを見つけました
$ echo $$
7791
次に、2つの方法で環境変数を確認しました。
$ cat /proc/7791/environ | tr '\0' '\n'
~からhttps://stackoverflow.com/a/532284/156458と
$ env
ただし、出力は同じではありません。たとえば、異なる値を表示しますPATH
。なぜ違うの?ありがとうございます。
答え1
この誤解を招く回答の以下の説明を読んでください。
/proc/$PID/environ
リアルタイムでシェルでは使用されません。プロセスの開始時の初期環境のみを示します。
初期化スクリプトを含むシェルで実行されるすべての操作は、現在表示されている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
コマンドを実行しているシェルの現在の環境と同じでなければならないコマンド環境を表示します。