Shell 的启动方式有以下四种:
- 交互式登录
- 非交互式登录
- 交互式非登录
- 非交互式非登录
其中交互式是指需要使用者手动输入的方式,而非交互式指的是脚本方式运行,不需要使用者手动输入。登录指的是使用者需要输入用户名和密码的方式,需要特定用户才能执行,而非登录不需要输入用户名和密码,任何用户都能执行。
比如:GNOME Terminal 默认是交互式非登录 Shell,iTerm2 Terminal 默认是交互式登录 Shell,ssh 连接也是交互式非登录 Shell,在终端上运行一般脚本是非交互式非登录 Shell,ssh 连接直接执行命令是非交互式登陆 Shell 等。
- 交互式区分方式
- 根据
$- 变量区分,含有 i (interactive) 为交互式 Shell。
- 根据
$PS1 变量区分,不为空的是交互式 Shell。
1
2
|
echo "$PS1"
[\u@\h \W]\$
|
- 指定
-c 选项运行非交互式 Shell,指定 -i 选项运行交互式 Shell。
- 登录式区分方式
- 根据
$0 变量区分,带 - 为登录 Shell。
- 根据
shopt login_shell,Bash 独有。
- 执行
logout 命令,只有登录 Shell 才能运行这条命令
1
2
|
logout
bash: logout: not login shell: use `exit'
|
- 指定
-l 或者 --login 选项运行登陆 Shell。