• 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 ~]$ 
    
  • 相关阅读:
    C#开发微信门户及应用(6)--微信门户菜单的管理操作
    C#开发微信门户及应用(5)--用户分组信息管理
    Django
    Django
    Django
    Django
    Django
    Django
    6.1
    Django
  • 原文地址:https://www.cnblogs.com/elfcafe/p/13358089.html
Copyright © 2020-2023  润新知