少于 1 分钟阅读 次阅读

定义

  • 登录shell:重点在 “登录”​ 。就像你回家需要“用钥匙开门”这个身份认证和初始化的过程。它的核心是为你这个用户进行一次完整的会话初始化,加载全局的和你个人专属的环境变量、路径等设置。
  • 交互式shell:重点在 “交互”​ 。就像你开门后,坐下来开始跟家人(电脑)对话。它的核心是提供一个提示符,等待你输入命令,并立即给你反馈。

它们不是对立关系,而是两个维度,可以同时成立。


判断路径

Step 1

| 场景 | 登录 shell | 交互式 shell | | ——— | ———- | ———— | | ssh 登录 | ✅ | ✅ | | su - user | ✅ | ✅ | | tty 登录 | ✅ | ✅ | | 桌面终端 | ❌ | ✅ | | bash | ❌ | ✅ | | 脚本 | ❌ | ❌ |


Step 2

echo $-

如果包含 i

himBHs
 ^

✔ 交互式 shell

没有 i

❌ 非交互式(脚本)


日常场景

场景 1:刚开机,TTY 登录

Ubuntu 22.04
login: arm
Password:

✔ 这是:

  • ✅ 登录 shell
  • ✅ 交互式 shell

原因:

  • 你“登录”了
  • 你要开始敲命令了

场景 2:SSH 登录服务器(最常见)

✔ 这是:

  • ✅ 登录 shell
  • ✅ 交互式 shell

场景 3:桌面打开 Terminal(GNOME Terminal / Konsole)

点击终端图标

默认情况下(99% 发行版):

✔ 这是:

  • ❌ 非登录 shell
  • ✅ 交互式 shell

场景 4:在终端里再敲一次 bash

bash

✔ 这是:

  • ❌ 非登录 shell
  • ✅ 交互式 shell

场景 5:跑脚本

./build.sh

✔ 这是:

  • ❌ 非登录 shell
  • ❌ 非交互式 shell

场景 6:su 切用户(重点)

su arm

❌ 不是登录 shell ✔ 是交互式 shell

但:

su - arm

✔ 是登录 shell ✔ 是交互式 shell

- = 模拟一次完整登录

留下评论