Shell四种运行方式(启动方式)的实现
Shell是一个应用程序,它的一端连接着Linux内核,另一端连接着用户。Shell是用户和Linux系统沟通的桥梁,我们都是通过Shell来管理Linux系统。
我们可以直接使用Shell,也可以输入用户名和密码后再使用Shell;第一种叫做非登录式,第二种叫做登录式。
我们可以在Shell中一个个地输入命令并及时查看它们的输出结果,整个过程都在跟Shell不停地互动,这叫做交互式。我们也可以运行一个Shell脚本文件,让所有命令批量化、一次性地执行,这叫做非交互式。
总起来说,Shell一共有四种运行方式:
- 交互式的登录Shell;
- 交互式的非登录Shell;
- 非交互式的登录Shell;
- 非交互式的非登录Shell。
判断Shell是否是交互式
判断是否为交互式Shell有两种简单的方法。
1)查看变量-的值,如果值中包含了字母i,则表示交互式(interactive)。
【实例1】在CentOSGNOME桌面环境自带的终端下输出-的值:
[jb51.net]$echo$- himBH
包含了i,为交互式。
【实例2】在Shell脚本文件中输出-的值:
[jb51.net]$cattest.sh #!/bin/bash echo$- [jb51.net]$bash./test.sh hB
不包含i,为非交互式。注意,必须在新进程中运行Shell脚本。
2)查看变量PS1的值,如果非空,则为交互式,否则为非交互式,因为非交互式会清空该变量。
【实例1】在CentOSGNOME桌面环境自带的终端下输出PS1的值:
[mozhiyan@localhost]$echo$PS1 [\u@\h\W]\$
非空,为交互式。
【实例2】在Shell脚本文件中输出PS1的值:
[jb51.net]$cattest.sh #!/bin/bash echo$PS1 [jb51.net]$bash./test.sh
空值,为非交互式。注意,必须在新进程中运行Shell脚本。
判断Shell是否为登录式
判断Shell是否为登录式也非常简单,只需执行shoptlogin_shell即可,值为on表示为登录式,off为非登录式。
shopt命令用来查看或设置Shell中的行为选项,这些选项可以增强Shell的易用性。
【实例1】在CentOSGNOME桌面环境自带的终端下查看login_shell选项:
[jb51.net]$shoptlogin_shell login_shelloff
【实例2】按下Ctrl+Alt+Fn组合键切换到虚拟终端,输入用户名和密码登录后,再查看login_shell选项:
[jb51.net]$shoptlogin_shell login_shellon
【实例3】在Shell脚本文件中查看login_shel选项:
[jb51.net]$cattest.sh #!/bin/bash shoptlogin_shell [jb51.net]$bash./test.sh login_shelloff
同时判断交互式、登录式
要同时判断是否为交互式和登录式,可以简单使用如下的命令:
echo$PS1;shoptlogin_shell
或者
echo$-;shoptlogin_shell
常见的Shell启动方式
1)通过Linux控制台(不是桌面环境自带的终端)或者ssh登录Shell时(这才是正常登录方式),为交互式的登录Shell。
[jb51.net]$echo$PS1;shoptlogin_shell [\u@\h\W]\$ login_shellon
2)执行bash命令时默认是非登录的,增加--login选项(简写为-l)后变成登录式。
[jb51.net]$cattest.sh #!/bin/bash echo$-;shoptlogin_shell [jb51.net]$bash-l./test.sh hB login_shellon
3)使用由()包围的组命令或者命令替换进入子Shell时,子Shell会继承父Shell的交互和登录属性。此种子进程只是又fork创建,没有执行exce,不会重新加载配置文件
[jb51.net]$bash [jb51.net]$(echo$PS1;shoptlogin_shell) [\u@\h\W]\$ login_shelloff [jb51.net]$bash-l [jb51.net]$(echo$PS1;shoptlogin_shell) [\u@\h\W]\$ login_shellon
4)ssh执行远程命令,但不登录时,为非交互非登录式。
[jb51.net]$sshlocalhost'echo$PS1;shoptlogin_shell' login_shelloff
5)在Linux桌面环境下打开终端时,为交互式的非登录Shell。
桌面环境下打开终端为交互式的非登录Shell
到此这篇关于Shell四种运行方式(启动方式)的实现的文章就介绍到这了,更多相关Shell运行方式内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。