Shell总结11-shell运行模式
交互式、非交互式
交互式
以交互式方式执行的shell指的是通过终端terminal和用户互动运行的shell。shell等待你从键盘上输入,然后将结果显示在屏幕上输出。比如执行从字符终端登录界面。
非交互式
以非交互式方式执行的shell就是运行过程中不需要与用户输入输出打交道的shell。比如执行一个静默安装的自动化的脚本。
判断是否交互式
if [ "$PS1" ]; then
echo "this is interactive shell"
fi
登录式、非登录式
登录式
顾名思义需要登录shell:需要用户名、密码才能运行的shell或者指定—login或-l选项的shell
非登录式
非登录shell:不需要用户名、密码就可以打开的shell,例如:默认sh下直接bash就可以打开一个新的非登录shell;在Gnome图形界面下打开的Terminal窗口程序。
常见的shell运行模式
1. 终端登录
包括正常模式ttyN下的终端登录(可以Ctrl+Alt+Fn切换)、远程SSH登录都是交互式+登录式的shell
终端登录
ssh远程登录
Last login: Mon Jul 02 11:35:34 2020 from 192.168.56.1
[nginx@nginx-node01 ~]$ echo $PS1;shopt login_shell
[u@h W]$
login_shell on
[nginx@nginx-node01 ~]$
2. su命令
su在默认没有-或—logoin的情况下是交互式+非登录式的shell
su - username 或 su username —login
[nginx@nginx-node01 ~]$ su - root
Password:
Last login: Mon Jul 20 13:02:37 EDT 2020 on pts/0
[root@nginx-node01 ~]# echo $PS1;shopt login_shell
[u@h W]$
login_shell on
su username
[nginx@nginx-node01 ~]$ su root
Password:
[root@nginx-node01 nginx]# echo $PS1;shopt login_shell
[u@h W]$
login_shell off
3. shell中的命令
a. 本地的子shell中的命令
执行不带"--login"选项的sh或者bash命令(本地的子shell)时为交互式、非登录式shell
[nginx@nginx-node01 ~]$ sh
sh-4.2$ echo $PS1;shopt login_shell
s-v$
login_shell off
[nginx@nginx-node01 ~]$ sh -l
sh-4.2$ echo $PS1;shopt login_shell
s-v$
login_shell on
b. 远程shell中命令
执行ssh远程shell命令时尽管有输入密码认证的过程但是执行命令仍为非交互+非登录式的shell
hackun@MacBookPro:~$ ssh nginx@192.168.56.104 'echo $PS1;shopt login_shell'
nginx@192.168.56.104's password:
login_shell off
4. bash脚本
执行本地shell脚本时,为非交互式+非登录式的shell。指定"—login"后,将成为非交互+登录式的shell。
[nginx@nginx-node01 ~]$ cat << EOF >>test.sh
> echo $PS1
> shopt login_shell
> EOF
[nginx@nginx-node01 ~]$ bash test.sh
[u@h W]$
login_shell off
[nginx@nginx-node01 ~]$ bash --login test.sh
[u@h W]$
login_shell on
[nginx@nginx-node01 ~]$