通过输入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 的单独启动文件”是否意味着“每个交互式 shell 的单独启动文件”?
答案1
这些bashrc
文件用于初始化每个单独的交互式 shell。
我有点不确定为什么这里实际上需要“per-”前缀,因为登录 shell 也存在完全相同的情况(尽管对于其他文件而言)。此外,非交互式 shell 将使用$BASH_ENV
保存路径名的任何文件,或者换句话说,“$BASH_ENV
是每个非交互式 shell 的启动文件”(如果您愿意的话)。
这可能是试图强调(无论出于何种原因)这些文件的实际来源每个交互式外壳。
该措辞是在bash
(我相信)的 2.0 版本中引入的。
答案2
这里有两件事。首先是简单的:
“个人”只是“个人”的另一个词,意思是(在本例中)用户帐户主目录中的文件。事实上,请注意~/
所有个人/个人文件的前缀。
在桌面系统(例如家里的计算机)上,您通常只有一个用户帐户,但在服务器计算机上,可以注册多个帐户,并且每个帐户都有自己的主目录,因此有自己的个人/个人.bash_profile
,.bashrc
等等。
现在是困难的一个,为了尝试解释这一点,我需要一个简短的序言:
Bash 区分“登录” 交互式 shell 和 “其他“交互式 shell。(我对其他程序没有经验,例如zsh
或ksh
但我想它们也有)。
例如,在 Linux 系统上登录shell 通常只是您输入(正确)用户名和密码后启动的第一个 shell文本控制台或通过 ssh 等网络连接。
相反, ”其他” 交互式 shell 通常是当您单击终端仿真器应用程序的图标时由图形桌面启动的 shell。
“其他”(即非登录)交互式 shell 也是当您随后调用嵌套交互式 shell 时,甚至是从登录一。
后一种情况的一个实际例子。假设您在验证自己身份后出现在第一个 shell 的提示符下(即登录)通过 ssh 到远程计算机:这就是登录交互式外壳;但如果您随后键入bash
并按 Return 键,您将开始一个新的其他交互式外壳。您可以根据需要嵌套任意数量的它们。只是,您需要exit
为每个命令键入(或 Control-D),以便展开您启动的嵌套交互式 shell 堆栈。
Bash 的文档告诉你哪些文件在启动时自动执行登录shell 以及启动时的其他文件其他贝壳。还有一些文件仅在您退出时才会自动运行登录shell,但当你退出时就不会其他贝壳。