1、互動shell
互動式:顧名思義就是 shell 與使用者存在互動,
使用者登入後,在終端上輸入命令,shell 立即執行使用者提交的命令。
當使用者退出後,shell 也終止了。
2、非互動shell
非互動式:即 shell 與使用者不存在互動,而是以 shell script 的方式執行的。
shell 讀取存放在檔案中的命令, 並且執行它們。
當它讀到檔案的結尾 eof,shell 也就終止了。
3、區分方法
可以通過列印 $- 變數的值,並檢視其中的 i - interactive 選項來區分互動式與非互動式shell。
比如:~> echo $-
himbh
有 i - interactive ,所以是 互動式 shell;反之則為非互動式。
1、登入shell
登入 shell 是指需要使用者名稱、密碼登入後進入的 shell,或者通過 --login 選項生成的 shell 。
2、非登入shell
非登入 shell 是指不需要輸入使用者名稱和密碼即可開啟的 shell,
比如輸入命令 bash或者sh 就能進入乙個全新的非登入 shell,
在 gnome 或 kde 中開啟乙個 「terminal」 視窗,也是乙個非登入 shell。
3、區分方法
如何區分登入 shell 和非登入 shell 呢,可以通過檢視 $0 的值,登入 shell 返回 -bash,而非登入 shell 返回的是 bash 。
需要注意的是:
執行 exit 命令, 退出的 shell 可以是登入 或者 非登入 shell ;
執行 logout 命令,則只能退出登入 shell,不能退出非登入 shell 。
:~> sh
:~> logout
sh: logout: not login shell: use `exit'
互動/非互動/登入/非登入 shell 這些組合情況, 在指令碼的呼叫方面有區別;而且對於 bash 與 sh 也存在差異;
以下分情況說明具體的呼叫情況(假如所執行指令碼名為 test.sh )
1、互動式的登入shell (bash –il test.sh)
載入的資訊:
/etc/profile
~/.bash_profile( -> ~/.bashrc -> /etc/bashrc)
~/.bash_login
~/.profile
2、非互動式的登入shell (bash –l test.sh)
載入的資訊:
/etc/profile
~/.bash_profile ( -> ~/.bashrc -> /etc/bashrc)
~/.bash_login
~/.profile
$bash_env
3、互動式的非登入shell (bash –i test.sh)
載入的資訊:
~/.bashrc ( -> /etc/bashrc)
4、非互動式的非登入shell (bash test.sh)
載入的資訊:
$bash_env
1、互動式的登入shell (sh –il test.sh)
載入的資訊:
/etc/profile
~/.profile
2、非互動式的登入shell (sh –l test.sh)
載入的資訊:
/etc/profile
~/.profile
3、互動式的非登入shell (sh –i test.sh)
載入的資訊:
$env
4、非互動式的非登入shell (sh test.sh)
載入的資訊:
nothing
這些配置的載入與否,導致了 linux 很多預設選項的差異。
互動式 非互動式,登入式 非登入式Shell
互動式shell和非互動式shell 互動式模式 在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的 登入 執行一些命令 退出。當你退出後,shell也終止了。非互動式模式 以shell scrip...
互動式 vs 非互動式 登入式 vs 非登入式
方式 區別區分方法 互動式與使用者互動 echo 返回值有i 非互動式 與script互動 echo 返回值沒有i 方式 登入區別 退出區別 區分方法 登入式需要username pwd logout exit echo 0 返回是 bash 非登入式 無需要username pwd exit ec...
Mac終端非互動登入遠端伺服器
對於研發來說,經常需要在各個環境的伺服器中來回切換,來跟進專案日誌,快速定位問題。在終端使用 ssh 命令來登入各個伺服器,最重要的是你不僅要記得各個伺服器的 ip 使用者名稱 密碼等資訊,而且每次的登入都需要手動輸入以上資訊,這些個重複機械的動作,可以考慮讓機器來做就好了,為我們節約時間。usr ...