我找到了bash读取启动文件的方式:
当bash被称为交互式登录外壳,或者作为与-login选项的非相互作用外壳时,如果该文件存在,它首先从文件/etc/profile执行命令。阅读该文件后,它以该顺序寻找〜/.bash_profile,〜/.bash_login和〜/.profile,并从存在且可读的第一个命令中读取和执行命令。当外壳开始抑制这种行为时,可以使用 - 新原毛选项。
http://www.gnu.org/software/bash/manual/bashref.html#bash-startup-files
为什么这是 - 我的意思是"〜/.bash_profile,〜/.bash_login和〜/.profile"的队列。(并且此逻辑 - "如果一个文件中的一个完全不读取另一个文件")
我真的不明白这一点,为什么我们需要那么多混乱。为什么Bash不仅读了一个"全局"和一个"用户特定"的启动文件?
的原因是,使用外壳有不同的方法,有不同的外壳,您可能需要共享/重新使用一些选项(或不!)。p>例如,所有源自Bourne Shell的外壳读取~/.profile
。因此,如果要在/bin/sh
,/bin/ksh
和/bin/bash
之间共享选项,请将它们放在那里。
,但是,您可能需要bash和ksh的不同选项。在这种情况下,分别使用.bash_profile
和.kshrc
,并让它们来源~/.profile
。
使用上面的规则,您可以微调外壳设置。它将首先加载最适合其目的的配置文件。在上述配置文件中,您可以选择加载其他文件以继承您想要的任何东西。如果仅使用.profile
,则可以轻松在不同的外壳之间切换。
我不确定.bash_profile
和.bash_login
之间的区别;也许这是一个错误或设计更改的剩余。
登录脚本仅针对登录外壳执行(即,当用户登录时,系统创建的第一个外壳;所有其他外壳和进程都将是它的孩子)。登录外壳包含诸如您想要的全局变量之类的东西。一个常见的示例是SSH代理的ID,因此您可以在任何外壳中加载密钥,它们将适用于同一用户的每个过程。对于您开始的每个外壳,这样做是没有意义的。
另一方面,定义非相互作用壳的提示是没有意义的,因此这将进入其他配置脚本。
bash具有多种不同的启动方式,每种方法都允许不同的配置。这些包括互动,非交互式,登录,非login,SH和这些组合的任何组合。
您可能会使您更容易的事情以及对其他有不同要求的人更容易的事情感到困惑。这几乎是Linux/unix方式。
编辑:
文件加载顺序的原因是.bash_login和.profile是.bash_profile的同义词。这些来自c shells .login 文件,伯恩·壳和korn shells .profile 。据我了解,这种订购允许与这些其他外壳的向后兼容性(在C壳的情况下失败)。