【发布时间】:2020-02-27 01:06:12
【问题描述】:
编辑
我的问题的答案其实很明显,我只是忘记了 EXPORT 关键字的含义。为了以防万一,我还是把解释放在这里了。
简而言之,当使用 Ctrl-Alt T 打开终端时,会创建一个新的 shell,它是登录时创建的 shell 的子代。正如here 解释的那样,loggin shell 通过读取/etc/profile 来初始化,并且正如here 和更具体地说here 解释的环境元素被传输到子进程,特别是前缀为变量使用 EXPORT 关键字。
我试图了解在打开新(虚拟)终端时在 linux 下设置
PATH 的机制是什么。
我知道可以在多个文件中更改PATH(例如系统:/etc/{profile、bash.bashrc、...} 或用户: ~/{.profile, .bash_login, .bashrc... },其中一些在登录时读取,另一些在打开时读取(虚拟)终端。
根据我的测试,“profile”文件似乎是在启动时读取的(当用户登录时),它为诸如PATH 之类的变量注册了一些启动值。然后,每次打开终端时,这些启动值都会提供给其他脚本(例如 bashrc)以进行进一步配置,结果类似于:PATH_IN_TERMINAL=$BASHRC_ADDONS:$PATH_FROM_PROFILE
值得注意的是,~/.profile 在登录后通常不会被读取。更改此文件不会对当前会话产生任何影响,PATH 的 PATH_FROM_PROFILE 部分将保持不变,直到再次登录(例如在注销后或通过 ssh 连接后)。
我说的对吗?如果是这样,我在哪里可以找到有关该主题的文档?
谢谢
【问题讨论】:
-
这完全是一个配置问题,您已经自己回答过了。归根结底,
PATH只是一个可以随意修改的值(可能继承自父进程);通过采购现有的配置文件来做到这一点只是一种方法,每台机器都可以有不同的设置。 -
另外,
~/.profile在登录后被读取是完全正常的;bash忽略它并支持~/.bash_login或~/.bash_profile(如果其中之一存在)是正常的。 -
你用你的句子“(可能继承自父进程)”完美地总结了我的问题。正如我的问题中提到的,我了解标准配置文件以及读取它们的条件和顺序。但我找不到任何关于从登录 shell 到子终端(或就此而言的 shell)传输环境变量的信息。
-
Oups...实际上,我的问题确实很愚蠢。感谢您的关键字“继承”,我设法在谷歌中挖掘了相关页面,这让我想起了“出口”关键字的语义:s