环境变量的性质/起源/传递

时间:2016-02-18 08:57:46

标签: python linux shell environment-variables

我需要环境变量方面的帮助。谷歌搜索只产生表面资源,而没有对环境变量的内在机制进行太多解释。

1)他们究竟是什么?是否恰好在许多操作系统中构建了预定义的,包容性的脚本参数?

2)他们的操作领域究竟是什么?它们仅在使用shells(linux)/file explorers(windows)调用时才有效吗?因为在大多数情况下,环境变量总是出现在接近提及贝壳/探险家的文献中。或者它们可以通过所有程序/脚本(例如python / c ++)访问,例如一些准stdin / stdout / stderr事件。

3)究竟谁创造了它们?它们是否仅由每个流程的父流程定义 - 因此,当fork()exec()生成它们时,是否可以为程序设置环境变量?或者它们是由底层操作系统自己定义的。

4)他们究竟是怎么过的?子进程是否继承了父进程的环境变量?父母的修改也会被传下来吗?或者让孩子们得到一个更新的"直接从操作系统中复制

环境变量都是不透明的物体。或者它们是一个松散定义的概念,它没有来自操作系统/ init /某个中央权限集中/标准化遗产,并且是根据具体情况创建的(例如, PYTHONPATHPATH有任何关系?)

经过一番挖掘,这是我到目前为止,请随时进行更正

1)环境变量是在分叉期间从每个父进程传递到子进程的字符串数组

2)他们的域是每一个进程,它是所有父/子进程之间的编程关系 - 除非父进行一些奇怪的事情,比如从继承中删除所有环境变量或其他东西

3)父母创建它们,init是所有进程的父进程,设置初始环境变量。

应该注意的是,用户输入命令的shell只是从b {/ 1}},/etc/profile这样的bash / shell init脚本继承其环境变量的另一个进程这种区别非常重要,因为当您在这些文件中设置任何环境时 - 它们只会出现在您的shell中,以及您的shell生成的任何子进程 - 这可能会导致误导性测试。例如,在运行CGI python Web服务器时,您决定测试一些文件。该文件使用您在.bash_profile中设置的环境变量$ X.这是因为在调用python脚本时,shell将它传递给新生成的python解释器。请注意,但是这个python解释器不会与CGI程序生成的解释器相同 - 因此不会有$ X - 导致错误。即使设置.bash_profile(全局init脚本)也只修改shell的env vars - 而不是系统上的所有进程。我目前不知道如何做后者。

4)父进程调用fork()和exec()之间的一些神奇之处。没有真正看过这个,但可能类似于set_env(...)或其他东西

5)没有头绪

0 个答案:

没有答案