.bashrc 有利于 .bash_profile 的任何场合吗?

.bashrc 有利于 .bash_profile 的任何场合吗?

.bashrc我理解and .bash_profile(或.bash_login与此相关)之间的区别~/.profile,但是有什么特殊原因选择.bashrcbash .bash_profileshell 配置吗?

.bashrc据我了解,每次打开新的 bash 窗口时,终端颜色、环境变量等配置都会重新加载。.bash_profile只会在登录时加载一次,我认为这应该足够了。那为什么要放东西进去.bashrc呢?

我能想到的唯一原因是避免必须注销系统才能加载配置。

除了纯粹的传统原因之外,我找不到答案。

答案1

外壳选项(来自shopt或者set)不是通过环境遗传的。也不是别名。例如,如果您想启用failglob所有 shell,则需要将其包含在 RC 文件中。可以用导出函数替换别名,但这些选项没有解决方法。

也是常规并受手册鼓励有.bash_profile来源.bashrc,因此您放入其中的这些配置将被加载到登录 shell 和非逻辑 shell 中。如果它们仅位于 中.bash_profile,则它们可能永远不会加载到您实际使用的 shell 中。

另一种情况是您有更复杂的配置与实际的可执行代码(例如,一些高级PROMPT_COMMAND)并希望在每个 shell 中使用新初始化的变量。您可能根本不希望导出这些变量,或者它们可能是数组但不能导出。

最后一种情况是命令执行产生副作用:fortune在每个新 shell 中显示待办事项列表。这与其说是“配置”,不如说是设置你的 shell 行为。


还有更一般的情况,bash不作为登录 shell 调用(因为您的会话管理器执行其他操作,或者它不是您的登录 shell,或者...),并且您.bash_profile根本不会被处理。不过,这可能超出了您的担忧范围。

答案2

如果您仅在文件中定义,则您定义的任何函数或别名在子 shell 中将不可用profile

您可以使用该source命令重新加载这些文件,而无需注销,但是如果路径已被修改,这可能会稍微破坏路径。.其本身是一个别名,source但有时它会被系统管理员重新映射(不确定原因)。

这也是为什么您需要运行 source 命令在正在运行的 shell 中创建函数和别名,因为单独运行脚本将创建一个新的 shell,然后在该 shell 中创建它们,而不是在您正在使用的 shell 中创建它们。

相关内容