登录/非登录 + 交互/非交互 Shell 对照图,直观展示 Bash/Zsh 配置文件的加载逻辑:
┌─────────────────────────────┐
│ 用户登录系统 │
└─────────────┬───────────────┘
│ 登录 Shell
▼
┌─────────────────────────────┐
│ 交互式登录 Shell (Interactive Login Shell) │
│ 加载文件示例: │
│ - /etc/profile │
│ - ~/.bash_profile 或 ~/.zprofile │
│ - ~/.bashrc / ~/.zshrc (可通过 source) │
│ - /etc/bash.bashrc / /etc/zshrc (可通过 source) │
│ - ~/.bash_logout / ~/.zlogout (退出时) │
└─────────────┬───────────────┘
│
│ 打开新终端窗口 / 新 Tab
▼
┌─────────────────────────────┐
│ 交互式非登录 Shell (Interactive Non-login Shell) │
│ 加载文件示例: │
│ - ~/.bashrc / ~/.zshrc │
│ - /etc/bash.bashrc / /etc/zshrc │
└─────────────┬───────────────┘
│
│ 执行脚本
▼
┌─────────────────────────────┐
│ 非交互式非登录 Shell (Non-interactive Non-login Shell) │
│ 加载文件示例: │
│ - ~/.bashrc / ~/.zshrc (可显式 source) │
│ - 脚本中指定的其他配置文件 │
└─────────────────────────────┘
说明:
- 交互式:能输入命令、看到输出。
- 非交互式:用于执行脚本,不等待用户输入。
- 登录 Shell:用户登录系统时启动,加载
.bash_profile/.zprofile等。 - 非登录 Shell:用户已经登录后打开的新终端或运行脚本,加载
.bashrc/.zshrc。 - 用户级配置(
~/.bashrc/~/.zshrc)可以覆盖或补充系统级配置。
可视化的 Shell 配置文件加载流程图,区分登录/非登录、交互/非交互,以及系统级/用户级配置:
┌───────────────┐
│ 用户登录系统 │
└───────┬───────┘
│
▼
┌───────────────────────────┐
│ 交互式登录 Shell │
│ (Interactive Login Shell) │
├───────────────────────────┤
│ 系统级:/etc/profile │
│ 用户级:~/.bash_profile │
│ ~/.zprofile │
│ 可加载:~/.bashrc/ ~/.zshrc│
│ 系统级:/etc/bash.bashrc │
│ /etc/zshrc │
└─────────────┬─────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌─────────────────────────┐ ┌─────────────────────────┐
│ 交互式非登录 Shell │ │ 非交互式非登录 Shell │
│ (Interactive Non-login) │ │ (Non-interactive Non-login) │
├─────────────────────────┤ ├─────────────────────────┤
│ 用户级:~/.bashrc │ │ 脚本显式 source ~/.bashrc / ~/.zshrc │
│ 系统级:/etc/bash.bashrc│ │ 脚本中指定的其他配置文件 │
│ /etc/zshrc │ │ │
└─────────────┬───────────┘ └─────────────────────────┘
│
▼
终端交互命令图示说明:
-
颜色/风格区分(可以在文档里标记):
- 系统级配置
/etc/...→ 蓝色 - 用户级配置
~/.bashrc/~/.zshrc→ 绿色
- 系统级配置
-
箭头方向 表示加载顺序:
- 登录 Shell 先加载系统级,再加载用户级
- 非登录交互式 Shell 通常只加载
.bashrc/.zshrc - 非交互式 Shell 默认不加载
.bash_profile/.zprofile,可显式 source
-
交互 vs 非交互:
- 交互式 Shell 可以输入命令并显示输出
- 非交互式 Shell 一般用于脚本执行