交互式、非交互式,登錄式、非登錄式Shell


交互式Shell和非交互式Shell

  1. 交互式模式:在終端上執行,shell等待你的輸入,並且立即執行你提交的命令。這種模式被稱作交互式是因為shell與用戶進行交互。這種模式也是大多數用戶非常熟悉的:登錄、執行一些命令、退出。當你退出后,shell也終止了。
  2. 非交互式模式:以shell script(非交互)方式執行。在這種模式 下,shell不與你進行交互,而是讀取存放在文件中的命令,並且執行它們。當它讀到文件的結尾EOF,shell也就終止了。
  3. 可以通過打印“$-”變量的值(代表着當前shell的選項標志),查看其中的“i”選項(表示interactive shell)來區分交互式與非交互式shell。

登錄式Shell和非登錄式Shell

  1. 登錄shell:需要用戶名、密碼登錄后才能進入的shell(或者通過--login”選項生成的shell)。
  2. 非登錄shell:不需要輸入用戶名和密碼即可打開的Shell,例如:直接命令“bash”就是打開一個新的非登錄shell;在Gnome或KDE中打開一個“終端”(terminal)窗口程序也是一個非登錄shell。
  3. 退出一個登錄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
-su
keegen@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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM