.bashrc
我理解and .bash_profile
(或.bash_login
与此相关)之间的区别~/.profile
,但是有什么特殊原因选择.bashrc
bash .bash_profile
shell 配置吗?
.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 中创建它们。