Shell总结11-shell运行模式

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 ~]$ 
posted @ 2020-07-21 23:26  ElfCafe  阅读(517)  评论(0编辑  收藏  举报