Bash
如何更改 bash shell 的 /proc/*/environ
這是外殼的 PID:
nathan@guixlaptop ~ $ $$ bash: 10984: command not found
我導出一個環境變數:
nathan@guixlaptop ~ $ export TESTVAR=test
在 shell 的環境中找不到該變數:
nathan@guixlaptop ~ $ cat /proc/10984/environ | grep TESTVAR || echo "fail" fail
如何使變數出現在環境中?
我認為您需要處理 NUL 分隔的字元串,然後重新啟動 shell 以查看您要查找的結果:
$ $$ bash: 9166: command not found $ export TESTVAR=test_question # at this point, you can check `/proc/9166/environ`, but `TESTVAR` won't show up until the shell is re-started $ tr '\0' '\n' < /proc/9166/environ SHELL=/bin/bash NO_AT_BRIDGE=1 PWD=/home/pi LOGNAME=pi # ... etc, etc - the env var TESTVAR is not there... $ tr '\0' '\n' < /proc/9166/environ | grep TESTVAR $ # re-start bash & try again: $ exec bash $ tr '\0' '\n' < /proc/9166/environ | grep TESTVAR TESTVAR=test_question $
歸因於 @aviro 和 @stephenkitt 的簡化(見評論)
該文件包含目前執行的程序通過 啟動時設置的初始環境
execve(2)
。… 如果在 之後
execve(2)
,程序修改了它的環境(例如,通過呼叫函式如putenv(3)
或直接修改environ(7)
變數),該文件將不會反映這些更改。要查看更改,您需要啟動一個新的 shell:
$ TESTVAR=test bash $ grep TESTVAR /proc/$$/environ grep: /proc/1825425/environ: binary file matches
environ
除非您採取侵入性操作,否則您無法更改正在執行的 shell 中顯示的內容;有關詳細資訊,請參閱程序啟動後更改 /proc/PID/environ。