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