通过输入man bash
,我们可以看到
FILES
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
/etc/bash.bashrc
The systemwide per-interactive-shell startup file
/etc/bash.bash.logout
The systemwide login shell cleanup file, executed when a login shell exits
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
~/.bash_logout
The individual login shell cleanup file, executed when a login shell exits
~/.inputrc
Individual readline initialization file
“per-interactive-shell”是什么意思?特别是,这里的“per”是什么意思?这里的“per”是“每个”的意思吗?每个交互式shell?还是有别的意思?
“单独的每个交互式外壳启动文件”是否意味着“每个交互式外壳的单独启动文件”?
这些
bashrc
文件用于初始化每个单独的交互式 shell。我有点不确定为什么这里实际上需要“per-”前缀,因为登录 shell 也是如此(尽管对于其他文件)。此外,如果您愿意,非交互式 shell 将使用
$BASH_ENV
包含路径名的任何文件,或者换句话说“$BASH_ENV
是每个非交互式 shell 启动文件”。这可能是为了强调(无论出于何种原因)文件实际上是为每个交互式 shell 提供的。
该措辞是在
bash
(我相信)的 2.0 版中引入的。这里有两件事。首先是简单的:
“个人”只是“个人”的另一个词,意思是(在这种情况下)来自您的用户帐户主目录的文件。实际上请注意
~/
所有个人/个人文件的前缀。在桌面系统上,比如你家里的电脑,你通常只有一个用户账户,但在服务器计算机上可以注册多个账户,每个账户都有自己的主目录,因此有自己的个人/个人
.bash_profile
,.bashrc
等。现在是困难的,为了尝试解释这一点,我需要一个小序言:
Bash 区分“ login ”交互shell 和“其他”交互shell。(我对其他程序没有经验,例如
zsh
orksh
但我想他们也有)。例如,在 Linux 系统上,登录shell 通常只是在您从文本控制台或网络连接(如 ssh)输入(正确)用户名和密码后启动的第一个 shell。
相反,“其他”交互式外壳通常是在您单击终端仿真器应用程序图标时由图形桌面启动的外壳。
“其他”(即非登录)交互式外壳也是当您随后调用嵌套的交互式外壳时,即使是从登录的外壳。
后一种情况的一个实际例子。假设您在通过 ssh 对远程计算机进行身份验证(即登录)后处于第一个 shell 的提示符下:这就是登录interactive-shell;但是如果您随后键入
bash
并按回车键,您将启动一个新的其他交互式外壳。您可以随意嵌套它们。只是,您需要为exit
它们中的每一个键入(或 Control-D),以便展开您启动的嵌套交互式 shell 堆栈。那里的 Bash 文档告诉您哪些文件会在登录shell启动时自动执行,哪些文件会在其他shell 启动时自动执行。还有一些文件仅在您退出登录shell 时自动运行,但在您退出其他shell 时不会自动运行。