据我所知,~/.bashrc、~/.bash_profile和/etc/profile都是相关文件。有人知道这些文件的用途和区别吗?
对于Bash来说,它们的工作方式如下。按照相应列向下读取。依次执行A、B、C等。B1、B2、B3表示只执行找到的第一个文件。
+----------------+-----------+-----------+------+
| |Interactive|Interactive|Script|
| |login |non-login | |
+----------------+-----------+-----------+------+
|/etc/profile | A | | |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc| | A | |
+----------------+-----------+-----------+------+
|~/.bashrc | | B | |
+----------------+-----------+-----------+------+
|~/.bash_profile | B1 | | |
+----------------+-----------+-----------+------+
|~/.bash_login | B2 | | |
+----------------+-----------+-----------+------+
|~/.profile | B3 | | |
+----------------+-----------+-----------+------+
|BASH_ENV | | | A |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
| | | | |
+----------------+-----------+-----------+------+
|~/.bash_logout | C | | |
+----------------+-----------+-----------+------+
以下是来自http://www.solipsys.co.uk/new/BashInitialisationFiles.html 的精彩流程图,更为详细的说明如下:
/etc/bashrc
怎么样? - kgibm/etc/profile
是全局的登录 shell(交互式或非交互式)配置文件,~/.bash_profile
是每个用户的登录 shell 配置文件,而 ~/.bashrc
则是交互式非登录 shell 的配置文件。
从 man bash
中可以得到以下信息:
调用方式
[...]
当 bash 作为一个交互式登录 shell 被调用时,或者作为一个使用 --login 选项的非交互式 shell 被调用时,它首先会读取并执行 /etc/profile 文件中的命令(如果该文件存在)。在读取该文件后,它会按照 ~/.bash_profile、~/.bash_login 和 ~/.profile 的顺序查找这些文件,并从第一个存在且可读的文件中读取并执行命令。当启动 shell 时使用 --noprofile 选项可以禁止此行为。
[...]
当启动的交互式 shell 不是登录 shell 时,bash 会从 ~/.bashrc 文件中读取并执行命令(如果该文件存在)。这可以通过使用 --norc 选项来禁止。--rcfile 文件选项将强制 bash 从指定文件而不是 ~/.bashrc 中读取并执行命令。
.bashrc
定义了特定用户的 shell 环境。它在每次 bash 启动时运行,无论以何种模式运行,例如交互式 shell、从远程调用(如 ssh user@host cat /etc/hosts
)或仅仅是一个 shell 脚本。
.bash_profile
是每个用户的登录配置文件。它在登录时运行一次,并执行用户与系统交互所需的操作,例如当天消息或新消息列表。
/etc/profile 是一个系统范围的登录配置文件脚本。它也在登录时运行一次,但在所有用户的用户特定的 .bash_profile
之前运行。
对于像 PATH 变量这样的环境变量,.bashrc 或 /etc/bash.bashrc 是一个不错的位置,这样就不必担心登录或非登录 shell。
此页面有一些详细信息:http://stefaanlippens.net/bashrc_and_others