为什么 .bash_profile 和 .bashrc 都有?

amp*_*ent 3 login profile bashrc

同时拥有.bash_profile和有什么意义,.bashrc前者通常采购后者,后者又/etc/bashrc在登录时采购?将.bashrc中的所有内容都放在.bash_profile 中(或反之亦然)并仅提供该登录脚本有什么缺点?

Mun*_*nir 11

Only.bashrc在非登录 shell.bash_profile上运行,而 only在登录 shell 上运行。

.bashrc 通常应该包含您想要在打开的每个 shell 中设置的内容,例如别名、函数等。这些是每个 shell 会话项,不是从环境继承的。

.bash_profile应该包含只需要在登录时定义的东西,比如 PATH 和其他环境变量、启动程序等。你只需要一次,而不是在你打开的每个 shell 中。在大多数情况下,您还需要.bashrc登录 shell 中的内容。这就是为什么.bash_profile来源.bashrc也是如此,但.bashrc通常不来源.bash_profile

/etc/bashrc并且/etc/profile是系统管理员或包管理器进行的系统范围设置。/etc/profile在每个登录 shell 中自动获取,在~/.bash_profile. /etc/bashrc不是来源,因此需要~/.bashrc时需要来源。

现在,您可以将这两个文件合并到一个文件中,并将另一个文件链接到第一个文件。但是您必须确保 PATH 和其他变量不是相对定义的(例如 PATH=$HOME/bin:$PATH),否则它们只会变得不必要地变大。此外,您必须小心重复启动程序。将这两个分开更容易。

bash 手册页的相关部分:

当 bash 作为交互式登录 shell 或作为具有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然后从第一个存在且可读的命令中读取和执行命令。当 shell 启动时可以使用 --noprofile 选项来禁止这种行为。

当登录 shell 退出时,bash 从文件 ~/.bash_logout(如果存在)读取并执行命令。

当一个不是登录 shell 的交互式 shell 启动时,bash 从 ~/.bashrc 读取并执行命令,如果该文件存在。这可以通过使用 --norc 选项来禁止。--rcfile 文件选项将强制 bash 从文件而不是 ~/.bashrc 读取和执行命令。