-
的值,如果值中包含了字母i
,則表示互動式(interactive)。-
的值:
[c.biancheng.net]$ echo $- himBH包含了
i
,為互動式。-
的值:
[c.biancheng.net]$ cat test.sh #!/bin/bash echo $- [c.biancheng.net]$ bash ./test.sh hB不包含
i
,為非互動式。注意,必須在新進程中執行 Shell 指令碼。PS1
的值,如果非空,則為互動式,否則為非互動式,因為非互動式會清空該變數。[[email protected]]$ echo $PS1 [[email protected] W]$非空,為互動式。
[c.biancheng.net]$ cat test.sh #!/bin/bash echo $PS1 [c.biancheng.net]$ bash ./test.sh空值,為非互動式。注意,必須在新進程中執行 Shell 指令碼。
shopt login_shell
即可,值為on
表示為登入式,off
為非登入式。[c.biancheng.net]$ shopt login_shell login_shell off
Ctrl+Alt+Fn
組合鍵切換到虛擬終端,輸入使用者名稱和密碼登入後,再檢視 login_shell 選項:
[c.biancheng.net]$ shopt login_shell login_shell on
[c.biancheng.net]$ cat test.sh #!/bin/bash shopt login_shell [c.biancheng.net]$ bash ./test.sh login_shell off
echo $PS1; shopt login_shell
或者echo $-; shopt login_shell
[c.biancheng.net]$ echo $PS1;shopt login_shell [[email protected] W]$ login_shell on
--login
選項(簡寫為-l
)後變成登入式。
[c.biancheng.net]$ cat test.sh #!/bin/bash echo $-; shopt login_shell [c.biancheng.net]$ bash -l ./test.sh hB login_shell on
()
包圍的組命令或者命令替換進入子 Shell 時,子 Shell 會繼承父 Shell 的互動和登入屬性。
[c.biancheng.net]$ bash [c.biancheng.net]$ (echo $PS1;shopt login_shell) [[email protected] W]$ login_shell off [c.biancheng.net]$ bash -l [c.biancheng.net]$ (echo $PS1;shopt login_shell) [[email protected] W]$ login_shell on
[c.biancheng.net]$ ssh localhost 'echo $PS1;shopt login_shell' login_shell off