运行“后,在哪里可以找到环境变量”;导出WEBROOT=xxx";在Ubuntu中?

运行“后,在哪里可以找到环境变量”;导出WEBROOT=xxx";在Ubuntu中?,ubuntu,environment-variables,Ubuntu,Environment Variables,系统是否将var存储在文件中 或者只是把它存储在内存中 我在~/.bashrc或/etc/profile中找不到它 我在哪里能找到它?谢谢它存在于shell的内存中,并被复制到shell执行的任何命令的内存中。环境是正在运行的进程的属性,从不写入磁盘;如果导出WEBROOT=blah,退出shell,然后重新启动它,您将看到WEBROOT现在为空。(您可以使用printenv或仅使用echo$WEBROOT检查此项) 一些shell启动脚本,如.bashrc或.bash\u profile,包含

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

或者只是把它存储在内存中

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


我在哪里能找到它?谢谢

它存在于shell的内存中,并被复制到shell执行的任何命令的内存中。环境是正在运行的进程的属性,从不写入磁盘;如果导出WEBROOT=blah,退出shell,然后重新启动它,您将看到
WEBROOT
现在为空。(您可以使用
printenv
或仅使用
echo$WEBROOT
检查此项)

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

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

int main(int argc, char** argv) {
  // ...
}
但实际上,
main
还有一个参数通常被省略:

int main(int argc, char** argv, char** envp) {
  // ...
}
这个
envp
是环境所在的地方——它由内核设置并推送到
main
上面的堆栈上,就像程序参数一样。标准Unix环境还提供指向此内存区域的
environ
指针,供libc函数使用,如
getenv
setenv

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

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

没有存储环境变量的单个文件

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

有关更多信息,请阅读: