我找到了我的 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 的当前环境。