为什么同时有 .bash_profile 和 .bashrc?

为什么同时有 .bash_profile 和 .bashrc?

.bash_profile同时拥有和有何意义.bashrc,前者通常会获取后者,而后者又会/etc/bashrc在登录时获取?把所有东西都放进去会有什么缺点.bashrc.bash_配置文件(或反之亦然)并仅获取一个登录脚本?

答案1

only.bashrc在非登录 shell 上运行,而 only.bash_profile在登录 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 读取和执行命令。

相关内容