/etc/bash.bashrc 何时被调用?

/etc/bash.bashrc 何时被调用?

这个文件到底是什么?文档没有提及它。而且它不应该自动运行(版本4.32014 年 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:

  1. 什么是/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 读取并执行命令。

您引用的文档似乎不是最新的。

相关内容