Skip to content

Shell 启动类型与配置文件

1. Shell 的启动类型

Shell 的启动类型可以从登录状态和交互状态两个维度分类:

  1. 登录状态
  2. 登录 Shell (Login Shell):需要完整用户认证(需要输入用户名/密码登录);
  3. 非登录 Shell (Non-login Shell):无需登录过程,在已有会话中启动。
  4. 交互状态
  5. 交互式 (Interactive Shell):等待用户输入命令,有提示符;
  6. 非交互式 (Non-interactive Shell):执行脚本或命令,无提示符。

综合来说分为以下四类:

  • 非交互式非登录 Shell:
  • 执行脚本的场景;
  • ssh user@host 'cmd',可以理解为 SSH 登录后执行 /bin/bash -c 'cmd'
  • 交互式非登录 Shell:在终端中执行 bashsu user 命令或在图形界面启动新终端。
  • 交互式登录 Shell:
  • su -sudo -i 切换用户;
  • SSH 交互式登录:ssh user@host(不带命令)。
  • 非交互式登录 Shell:指定 --login, -l 选项的场景,如 bash -l script.sh 等,该场景较少见;

2. Shell 的配置文件

  • 非登录场景,仅加载以下配置文件:
  • /etc/bash.bashrc (部分发行版为 /etc/bashrc)
  • ~/.bashrc
  • 登录场景,加载顺序如下。
  • /etc/profile
  • /etc/profile.d/*.sh
  • 加载下方第一个存在的配置文件:
    • ~/.bash_profile
    • ~/.bash_login
    • ~/.profile

Login Shell 不会读取 ~/.bashrc。 为了让 Login Shell 也加载 .bashrc,常见做法是在 ~/.bash_profile 中显式添加:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi