互動式 非互動式,登入式 非登入式Shell

2022-08-16 02:03:10 字數 1373 閱讀 9084

互動式shell和非互動式shell

互動式模式:在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。這種模式被稱作互動式是因為shell與使用者進行互動。這種模式也是大多數使用者非常熟悉的:登入、執行一些命令、退出。當你退出後,shell也終止了。

非互動式模式:以shell script(非互動)方式執行。在這種模式 下,shell不與你進行互動,而是讀取存放在檔案中的命令,並且執行它們。當它讀到檔案的結尾eof,shell也就終止了。

可以通過列印「$-」變數的值(代表著當前shell的選項標誌),檢視其中的「i」選項(表示interactive shell)來區分互動式與非互動式shell。

登入式shell和非登入式shell

登入shell:需要使用者名稱、密碼登入後才能進入的shell(或者通過--login」選項生成的shell)。

非登入shell:不需要輸入使用者名稱和密碼即可開啟的shell,例如:直接命令「bash」就是開啟乙個新的非登入shell;在gnome或kde中開啟乙個「終端」(terminal)視窗程式也是乙個非登入shell。

退出乙個登入shell:exit或者logout;退出乙個非登入shell:只能exit。

使用啟動指令碼,可以讓自定義的環境一勞永逸。

這些指令碼在shell被建立時執行根據shell是登入shell還是非登入shell,所執行的啟動指令碼也會不一樣。

su - username是登入shell;su username是非登入shell(注意su - username中間有空格)。直接開啟終端是非登入shell。

keegen@keegenscp:~$ su -keegen

密碼:

keegen@keegenscp:~$ echo $0

-sukeegen@keegenscp:~$ logout

keegen@keegenscp:~$ echo $0

bash

/etc/profile 是登入shell啟動後執行的第乙個啟動指令碼,它只為登入shell執行;非登入shell不會引發這個指令碼。

登入shell載入啟動指令碼的順序為:

/etc/profile → /etc/profile.d → ~/.bash_profile → ~/.bashrc → /etc/bashrc

每個呼叫的指令碼會依次撤銷前乙個呼叫指令碼中的改變。

在退出登入shell時,我們還可以執行某些任務,如建立自動備份、清除臨時檔案。把這些任務放在.bash_logout檔案中。

非登入shell載入啟動指令碼的順序:

~/.bashrc → /etc/bashrc → /etc/profile.d

互動式 vs 非互動式 登入式 vs 非登入式

方式 區別區分方法 互動式與使用者互動 echo 返回值有i 非互動式 與script互動 echo 返回值沒有i 方式 登入區別 退出區別 區分方法 登入式需要username pwd logout exit echo 0 返回是 bash 非登入式 無需要username pwd exit ec...

ssh執行非互動式命令

如果你想用指令碼自動化登入到某台機子上,然後在上邊執行個命令,怎麼辦呢?可以使用ssh的非互動式命令 ssh zhc hongchangfirst.com home hczhang bin build.sh 這裡可以用expect模擬鍵盤輸入將密碼輸入,也可以用無密碼登入,具體就是將自己的公鑰放在對...

ssh非互動式密碼輸入

ssh登陸不能在命令列中指定密碼。sshpass的出現,解決了這一問題。sshpass用於非互動ssh的密碼驗證,一般用在sh指令碼中,無須再次輸入密碼。它允許你用 p 引數指定明文密碼,然後直接登入遠端伺服器,它支援密碼從命令列 檔案 環境變數中讀取。其預設沒有安裝,需要手動安裝,方法如下 tar...