环境变量 - 在 Ubuntu 中运行 "export WEBROOT=xxx" 后,在哪里可以找到 env var?



系统是否在文件中存储var ?

还是直接存储在内存中?

我在~/中找不到它。/etc/profile.

我在哪里可以找到它?由于

它存在于shell的内存中,并被复制到shell执行的任何命令的内存中。环境是正在运行的进程的属性,永远不会写入磁盘;如果您执行export WEBROOT=blah,退出shell,然后重新启动它,您将看到WEBROOT现在是空的。(你可以检查printenvecho $WEBROOT)

一些shell启动脚本,如.bashrc.bash_profile,包含将某些环境变量初始化为指定值的命令。但这些只是export命令的录音,您可以在提示符下自己运行。它们不存储环境本身。

如果您编写C代码,您可能熟悉main函数的标准原型:

int main(int argc, char** argv) {
  // ...
}

但实际上,main的另一个参数通常被省略:

int main(int argc, char** argv, char** envp) {
  // ...
}

这个envp是环境所在的地方——它由内核设置并压入main之上的堆栈,就像程序参数一样。标准Unix环境还提供了指向该内存区域的environ指针,供getenvsetenv等libc函数使用。

当程序调用exec时,环境也被传递到该调用中,并被复制到exec 'd程序的初始堆栈中。可以看到系统调用的完整原型execve采用这个指针:

int execve(const char *path, char *const argv[], char *const envp[]);

没有单独的文件存放envt变量。

在终端上执行printenv。它将列出系统中声明的所有envt变量。

阅读更多信息:https://unix.stackexchange.com/questions/107407/from-where-does-printenv-command-read-environment-variables-which-i-have-not-def

最新更新