登录/非登录 + 交互/非交互 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) │
            │ - 脚本中指定的其他配置文件             │
            └─────────────────────────────┘

说明:

  1. 交互式:能输入命令、看到输出。
  2. 非交互式:用于执行脚本,不等待用户输入。
  3. 登录 Shell:用户登录系统时启动,加载 .bash_profile / .zprofile 等。
  4. 非登录 Shell:用户已经登录后打开的新终端或运行脚本,加载 .bashrc / .zshrc
  5. 用户级配置(~/.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      │     │                                 │
        └─────────────┬───────────┘     └─────────────────────────┘


                终端交互命令

图示说明:

  1. 颜色/风格区分(可以在文档里标记)

    • 系统级配置 /etc/... → 蓝色
    • 用户级配置 ~/.bashrc / ~/.zshrc → 绿色
  2. 箭头方向 表示加载顺序:

    • 登录 Shell 先加载系统级,再加载用户级
    • 非登录交互式 Shell 通常只加载 .bashrc / .zshrc
    • 非交互式 Shell 默认不加载 .bash_profile / .zprofile,可显式 source
  3. 交互 vs 非交互

    • 交互式 Shell 可以输入命令并显示输出
    • 非交互式 Shell 一般用于脚本执行