Shell四种运⾏⽅式(启动⽅式)
是⼀个应⽤程序,它的⼀端连接着内核,另⼀端连接着⽤户。Shell 是⽤户和 Linux 系统沟通的桥梁,我们都是通过 Shell 来管理 Linux 系统。
我们可以直接使⽤ Shell,也可以输⼊⽤户名和密码后再使⽤ Shell;第⼀种叫做⾮登录式,第⼆种叫做登录式。
我们可以在 Shell 中⼀个个地输⼊命令并及时查看它们的输出结果,整个过程都在跟 Shell 不停地互动,这叫做交互式。我们也可以运⾏⼀个⽂件,让所有命令批量化、⼀次性地执⾏,这叫做⾮交互式。
总起来说,Shell ⼀共有四种运⾏⽅式:
交互式的登录 Shell;
交互式的⾮登录 Shell;
⾮交互式的登录 Shell;
⾮交互式的⾮登录 Shell。
判断 Shell 是否是交互式
判断是否为交互式 Shell 有两种简单的⽅法。
1) 查看变量-的值,如果值中包含了字母i,则表⽰交互式(interactive)。
【实例1】在 CentOS GNOME 桌⾯环境⾃带的终端下输出-的值:
[c.biancheng]$ echo $-
h i mBH
包含了i,为交互式。
【实例2】在 Shell 脚本⽂件中输出-的值:
[c.biancheng]$ cat test.sh
#!/bin/bash
echo $-
[c.biancheng]$ bash ./test.sh
hB
不包含i,为⾮交互式。注意,必须在新进程中。
2) 查看变量PS1的值,如果⾮空,则为交互式,否则为⾮交互式,因为⾮交互式会清空该变量。
【实例1】在 CentOS GNOME 桌⾯环境⾃带的终端下输出 PS1 的值:
[mozhiyan@localhost]$ echo $PS1
[\u@\h \W]\$
⾮空,为交互式。
【实例2】在 Shell 脚本⽂件中输出 PS1 的值:
[c.biancheng]$ cat test.sh
#!/bin/bash
echo $PS1
[c.biancheng]$ bash ./test.sh
空值,为⾮交互式。注意,必须在新进程中运⾏ Shell 脚本。
判断 Shell 是否为登录式
判断 Shell 是否为登录式也⾮常简单,只需执⾏shopt login_shell即可,值为on表⽰为登录式,off为⾮登录式。
shopt 命令⽤来查看或设置 Shell 中的⾏为选项,这些选项可以增强 Shell 的易⽤性。
【实例1】在 CentOS GNOME 桌⾯环境⾃带的终端下查看 login_shell 选项:
[c.biancheng]$ shopt login_shell
login_shell    off
【实例2】按下Ctrl+Alt+Fn组合键切换到虚拟终端,输⼊⽤户名和密码登录后,再查看 login_shell 选项:
[c.biancheng]$ shopt login_shell
login_shell    on
【实例3】在 Shell 脚本⽂件中查看 login_shel 选项:
[c.biancheng]$ cat test.sh
#!/bin/bash
shopt login_shell
[c.biancheng]$ bash ./test.sh
login_shell    off
同时判断交互式、登录式
要同时判断是否为交互式和登录式,可以简单使⽤如下的命令:
echo $PS1; shopt login_shell
或者
echo $-; shopt login_shell
常见的 Shell 启动⽅式
1) 通过 Linux 控制台(不是桌⾯环境⾃带的终端)或者 ssh 登录 Shell 时(这才是正常登录⽅式),为交互式的登录 Shell。
[c.biancheng]$ echo $PS1;shopt login_shell
[\u@\h \W]\$
login_shell    on
2) 执⾏ bash 命令时默认是⾮登录的,增加--login选项(简写为-l)后变成登录式。
[c.biancheng]$ cat test.sh
#!/bin/bash
echo $-; shopt login_shell
[c.biancheng]$ bash -l ./test.sh
hB
login_shell    on
3) 使⽤由()包围的或者进⼊⼦ Shell 时,⼦ Shell 会继承⽗ Shell 的交互和登录属性。此种⼦进程只是⼜fork创建,没有执⾏exce,不会重新加载配置⽂件
[c.biancheng]$ bash
[c.biancheng]$ (echo $PS1;shopt login_shell)
[\u@\h \W]\$
login_shell    off
[c.biancheng]$ bash -l
shell最简单脚本
[c.biancheng]$ (echo $PS1;shopt login_shell)
[\u@\h \W]\$
login_shell    on
4) ssh 执⾏远程命令,但不登录时,为⾮交互⾮登录式。
[c.biancheng]$ ssh localhost 'echo $PS1;shopt login_shell'
login_shell    off
5) 在下打开终端时,为交互式的⾮登录 Shell。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。