Bash

如何更改 bash shell 的 /proc/*/environ

  • January 10, 2022

這是外殼的 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 的簡化(見評論)

/proc/.../environ包含程序的初始環境

該文件包含目前執行的程序通過 啟動時設置的初始環境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

引用自:https://unix.stackexchange.com/questions/685723