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 包含该行
Run Code Online (Sandbox Code Playgroud)if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
在任何特定于登录的初始化之后(或之前)。
非交互式调用
Bash非交互启动时,为了运行一个shell脚本,例如在环境中寻找变量BASH_ENV,如果出现就将其值展开,并将展开后的值作为文件名进行读取和执行. Bash 的行为就像执行了以下命令:
Run Code Online (Sandbox Code Playgroud)if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
但 PATH 变量的值不用于搜索文件名。
如上所述,如果使用 --login 选项调用非交互式 shell,Bash 会尝试从登录 shell 启动文件读取和执行命令。
从技术上讲,/etc/bash.bashrc
为所有用户的交互式、非登录 bash shell 调用。
但是,通常(为所有登录 shell 调用)也会/etc/profile
调用。/etc/bash.bashrc
因此,/etc/bash.bashrc
所有登录 shell 也会调用该方法。
但是,第一行通常会检查是否退出(如果非交互)。
所以最后,/etc/bash.bashrc
所有交互式 bash shell(登录和非登录)都会有效执行。将其视为系统范围的~/.bashrc