这是 shell 的 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
如何让变量出现在环境中?
答案1
该文件包含当前执行的程序启动时设置的初始环境
execve(2)
。...如果,经过
execve(2)
,进程修改其环境(例如,通过调用诸如putenv(3)
或修改environ(7)
直接变量),该文件将不会反映这些更改。
要查看更改,您需要启动一个新的 shell:
$ TESTVAR=test bash
$ grep TESTVAR /proc/$$/environ
grep: /proc/1825425/environ: binary file matches
您无法更改正在运行的 shell 中显示的内容environ
,除非您采取侵入性操作;看进程启动后更改/proc/PID/environ了解详情。
答案2
我认为您需要处理 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 的简化(参见评论)
答案3
另一个例子,您可以使用strings
show proc/$$/environ 文件。
strings /proc/$$/environ # $$ mean current process PID,
# strings process newline characters in file.
strings /proc/$$/environ | grep USER
export TESTVAR=123
env |grep TSETVAR # found
strings /proc/$$/environ | grep TESTVAR # not found
# new session
bash
strings /proc/$$/environ | grep TESTVAR # found