>
编辑
我的问题的答案实际上很明显,我只是忘记了 EXPORT 关键字的含义。为了以防万一,我仍然在这里放弃解释。
因此,简而言之,当使用 Ctrl-Alt T 打开终端时,会创建一个新的 shell,它是在 loggin 创建的 shell 的子级。正如这里所解释的,loggin shell 是通过读取/etc/profile来初始化的,正如这里所解释的,更具体地说,环境的元素被传输到子进程,特别是以 EXPORT 关键字为前缀的变量。
我试图了解打开新(虚拟)终端时在 linux 下设置
PATH
的机制是什么。
我知道可以更改多个文件中的PATH
(例如系统:/etc/{profile,bash.bashrc,...}或用户:~/{.profile,.bash_login,.bashrc... },其中一些在登录时读取,其他在打开新的(虚拟)终端时读取。
根据我的测试,似乎">配置文件"文件是在启动时(当用户登录时)读取的,这会为变量(例如PATH
)注册一些启动值。然后,每次打开终端时,这些启动值都会提供给其他脚本(例如bashrc)进行进一步配置,结果如下:PATH_IN_TERMINAL=$BASHRC_ADDONS:$PATH_FROM_PROFILE
值得注意的是,登录后通常不会读取~/.profile。更改此文件在当前会话中不会产生任何影响,并且PATH
的PATH_FROM_PROFILE
部分将保持不变,直到再次登录(例如注销后或通过 ssh 连接)。
我说的对吗?如果是这样,我在哪里可以找到有关该主题的文档?
谢谢
这是我在这个主题上找到的最好的解释: 启动文件
在最常见的情况下,简单的解释是:
-
首次登录到主机后,请阅读
/etc/profile
,然后阅读第一个~/.bash_profile
、~/.bash_login
或~/.profile
。~/.profile
是 由多个外壳支持,所以是首选。 -
当 Bash 启动时,但不是在登录后立即,请阅读
~/.bashrc
。
因此,profile
文件旨在在登录时运行,并应用于打印初始消息(例如安全警告,每日消息),检查邮件以及配置很少更改的设置/变量。系统范围(配额、MOTD 等)或用户特定(时区、区域设置、终端等)。
.bashrc
文件旨在供个人用户自定义其交互式体验。 例如定义别名、设置提示、添加到 PATH 等。
我几乎总是在.profile
文件的末尾添加source ~/.bashrc
,以便我的 shell 始终根据我的要求进行自定义,即使在登录后立即也是如此。
注意:以上仅适用于交互式外壳(例如在终端上运行)。如果 bash 以非交互方式运行(例如通过cron
),则不会读取这些文件。在这些情况下,您应该创建一个包含所需变量的不同文件,并通过BASH_ENV
环境文件指定该文件。