什么时候调用/etc/bash.bashrc?

x-y*_*uri 6 bash configuration bashrc

这个文件到底是什么?文档没有提到它。它不应该自动运行(版本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
Run Code Online (Sandbox Code Playgroud)

在任何特定于登录的初始化之后(或之前)。

非交互式调用

Bash非交互启动时,为了运行一个shell脚本,例如在环境中寻找变量BASH_ENV,如果出现就将其值展开,并将展开后的值作为文件名进行读取和执行. Bash 的行为就像执行了以下命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
Run Code Online (Sandbox Code Playgroud)

但 PATH 变量的值不用于搜索文件名。

如上所述,如果使用 --login 选项调用非交互式 shell,Bash 会尝试从登录 shell 启动文件读取和执行命令。

Ste*_*itt 8

来自 Debian 的bash README

  1. 什么是/etc/bash.bashrc?它似乎没有记录。

    Debian 版本的 bash 使用一个特殊选项 ( -DSYS_BASHRC) 进行编译,该选项使 交互式非登录 shell先bash读。因此,在Debian系统, 是为是 。/etc/bash.bashrc~/.bashrc/etc/bash.bashrc~/.bashrc/etc/profile~/.bash_profile


wis*_*cky 5

从技术上讲,/etc/bash.bashrc为所有用户的交互式、非登录 bash shell 调用。

但是,通常(为所有登录 shell 调用)也会/etc/profile调用。/etc/bash.bashrc因此,/etc/bash.bashrc所有登录 shell 也会调用该方法。

但是,第一行通常会检查是否退出(如果非交互)。

所以最后,/etc/bash.bashrc所有交互式 bash shell(登录和非登录)都会有效执行。将其视为系统范围的~/.bashrc