我找到了我的 bash shell 的 pid
$ echo $$
7791
然後我透過兩種不同的方式檢查其環境變數:
$ cat /proc/7791/environ | tr '\0' '\n'
從https://stackoverflow.com/a/532284/156458, 和
$ env
然而它們的輸出並不相同。例如,它們顯示不同的 值PATH
。為什麼它們不同?謝謝。
答案1
您應該閱讀下面這個誤導性答案的評論。
/proc/$PID/environ
不被 shell 實時使用。它僅代表進程啟動時的初始環境。
在 shell 中完成的任何操作(包括其初始化腳本)都可以在 shell 內變更這些值,而不會變更proc
您正在查看的條目。
答案2
/proc/7791/environ
顯示 shell 的原始環境,它是在使用 execve 系統呼叫啟動進程時接收到的:
int execve(const char *filename, char *const argv[], char *const envp[]);
當 shell 運行時,它可以更改其導出變數集,例如透過計算.bashrc
.然後,envp
當env
程式啟動時,這個新集合將被傳遞到向量中。
答案3
無論您想解決什麼問題,您都可以嘗試使用
/proc/self
解決它。不是取得 shell 的初始環境,而是
cat /proc/self/environ
顯示指令的環境cat
,該環境應等於執行該指令的 shell 的目前環境。