-
的值,如果值中包含了字母i
,则表示交互式(interactive)。-
的值:
[task.lmcjl.com]$ echo $- himBH包含了
i
,为交互式。-
的值:
[task.lmcjl.com]$ cat test.sh #!/bin/bash echo $- [task.lmcjl.com]$ bash ./test.sh hB不包含
i
,为非交互式。注意,必须在新进程中运行 Shell 脚本。PS1
的值,如果非空,则为交互式,否则为非交互式,因为非交互式会清空该变量。[mozhiyan@localhost]$ echo $PS1 [\u@\h \W]\$非空,为交互式。
[task.lmcjl.com]$ cat test.sh #!/bin/bash echo $PS1 [task.lmcjl.com]$ bash ./test.sh空值,为非交互式。注意,必须在新进程中运行 Shell 脚本。
shopt login_shell
即可,值为on
表示为登录式,off
为非登录式。[task.lmcjl.com]$ shopt login_shell login_shell off
Ctrl+Alt+Fn
组合键切换到虚拟终端,输入用户名和密码登录后,再查看 login_shell 选项:
[task.lmcjl.com]$ shopt login_shell login_shell on
[task.lmcjl.com]$ cat test.sh #!/bin/bash shopt login_shell [task.lmcjl.com]$ bash ./test.sh login_shell off
echo $PS1; shopt login_shell
或者echo $-; shopt login_shell
[task.lmcjl.com]$ echo $PS1;shopt login_shell [\u@\h \W]\$ login_shell on
--login
选项(简写为-l
)后变成登录式。
[task.lmcjl.com]$ cat test.sh #!/bin/bash echo $-; shopt login_shell [task.lmcjl.com]$ bash -l ./test.sh hB login_shell on
()
包围的组命令或者命令替换进入子 Shell 时,子 Shell 会继承父 Shell 的交互和登录属性。
[task.lmcjl.com]$ bash [task.lmcjl.com]$ (echo $PS1;shopt login_shell) [\u@\h \W]\$ login_shell off [task.lmcjl.com]$ bash -l [task.lmcjl.com]$ (echo $PS1;shopt login_shell) [\u@\h \W]\$ login_shell on
[task.lmcjl.com]$ ssh localhost 'echo $PS1;shopt login_shell' login_shell off
本文链接:http://task.lmcjl.com/news/6818.html