这个文件到底是什么?文档没有提及它。而且它不应该自动运行(版本4.3
2014 年 2 月 2 日):
作为交互式登录 shell 调用,或使用 --login 调用
当 Bash 作为交互式登录 shell 或带有 --login 选项的非交互式 shell 被调用时,它首先从文件 /etc/profile 中读取并执行命令(如果该文件存在)。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的文件中读取并执行命令。启动 shell 时可以使用 --noprofile 选项来禁止此行为。
当登录 shell 退出时,Bash 会从文件 ~/.bash_logout(如果存在)中读取并执行命令。
作为交互式非登录 shell 调用
当启动非登录 shell 的交互式 shell 时,Bash 会从 ~/.bashrc 读取并执行命令(如果该文件存在)。这可以通过使用 --norc 选项来禁止。 --rcfile 文件选项将强制 Bash 从文件而不是 ~/.bashrc 读取并执行命令。
因此,通常,您的 ~/.bash_profile 包含行
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
在任何特定于登录的初始化之后(或之前)。
非交互调用
当 Bash 以非交互方式启动时,要运行 shell 脚本,例如,它会在环境中查找变量 BASH_ENV,如果它出现在那里,则扩展其值,并使用扩展后的值作为要读取和执行的文件的名称。 Bash 的行为就像执行了以下命令:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但 PATH 变量的值不用于搜索文件名。
如上所述,如果使用 --login 选项调用非交互式 shell,Bash 会尝试从登录 shell 启动文件读取并执行命令。
答案1
来自 Debian 的bash
README
:
- 什么是
/etc/bash.bashrc
?似乎没有记录。Debian 版本的 bash 是使用一个特殊选项 (
-DSYS_BASHRC
) 进行编译的,该选项可以 在交互式非登录 shell之前进行bash
读取。因此,在 Debian 系统上, to就是to 。/etc/bash.bashrc
~/.bashrc
/etc/bash.bashrc
~/.bashrc
/etc/profile
~/.bash_profile
答案2
从技术上讲,/etc/bash.bashrc
为所有用户的交互式、非登录 bash shell 调用。
但是,通常/etc/profile
(为所有登录 shell 调用)/etc/bash.bashrc
也会调用。因此/etc/bash.bashrc
,所有登录 shell 也会调用该方法。
但是,第一行通常会检查是否退出(如果非交互)。
所以最后,/etc/bash.bashrc
所有交互式 bash shell(登录和非登录)都会有效执行。将其视为系统范围的~/.bashrc
答案3
从man bash
:
当启动非登录 shell 的交互式 shell 时,bash 将从 /etc/bash.bashrc 和 ~/.bashrc 读取并执行命令(如果这些文件存在)。这可以通过使用 --norc 选项来禁止。 --rcfile 文件选项将强制 bash 从文件而不是 /etc/bash.bashrc 和 ~/.bashrc 读取并执行命令。
您引用的文档似乎不是最新的。