首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >导出环境变量与环境变量

导出环境变量与环境变量
EN

Stack Overflow用户
提问于 2014-01-19 19:30:41
回答 2查看 203关注 0票数 1

出口环境变量和环境变量之间有什么区别?

我要回答一个问题:

如何显示终端中定义的所有环境变量?

首先,我认为它是printenv,但是它又说是在终端中定义的,我认为这意味着导出环境变量,我已经读过它们是用env显示的。

我有点困惑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-19 20:29:48

export是一个创建环境变量的命令。短语“导出环境变量”是多余的。

shell可能有一些没有使用export命令创建的环境变量,因为每个程序从调用程序通过execve系统调用传递的环境开始,所以我想您可以说有些环境变量从未“导出”过。

但这是个愚蠢的区别。shell不跟踪其环境变量的历史起源。你没什么办法让它告诉你哪些是“在终端中定义的”。它不知道。(history | grep export?啊.)

针对Charles的回答,unix中没有“持久性”环境变量。持久变量的错觉可以通过将定义放入shell启动文件(/etc/profile$HOME/.profile等)来创建。但是这个定义将是一个export命令,与手动运行的export命令是无法区分的。

在某些系统上,存在一个/etc/environment文件,它创建了一组“共享、持久”环境变量的更强大的错觉,但实际上两者都不是。它不包含export关键字,因为它没有被shell解析- PAM在启动shell之前处理它。这是与/etc/profile相同的原则--每次登录时,都必须将文件读取到初始进程的环境中。您可以看到,通过对来自/etc/环境的变量进行“修改和签入另一个进程”的实验,甚至修改/etc/environment文件并检查对已经存在的进程的影响,都不会共享这些值。

环境可以更准确地称为“遗传变量”--从父母到孩子,信息只能通过一种途径流动。现在改变术语为时已晚。

票数 2
EN

Stack Overflow用户

发布于 2014-01-19 19:32:45

OSes之间可能会有所不同,但我的理解是,导出的变量仅用于该会话(即打开一个终端、导出一个环境变量、打开另一个终端,并且导出的env没有在新的终端上设置),而环境变量是持久的(会话之间、重新启动等等)。

关于不同类型的env如何应用于应用程序,我不知道任何(显然,如果您希望导出的env应用程序,那么您必须在运行应用程序之前导出它)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21221540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档