1. 程式人生 > >幾種shell執行模式的區別

幾種shell執行模式的區別

Linux中的Shell分為:登入shell,非登入shell,互動式shell,非互動式shell,搞清楚這集中模式,對於修改系統環境變數防止出錯。

Login Shell:當init3時,mingetty spawn出登入提示符的時候,你輸入帳號和密碼進入了,出現了shell提示符,這個過程就是登入shell;

Interactive Shell:接下來你得到了一個像“[email protected] />”這樣的提示符,你輸入什麼,它就解釋出什麼,這就是互動式shell;你在當前shell又fork了一個 shell(bash),這個bash也是互動式shell。通常情況下interactive shell是login shell派生出來的。


Non Interactive Shell:你需要寫一個bash script,用外部shell執行“bash script.sh”命令,它(bash)從可以第一條命令執行到最後一條然後退出,不與你進行任何互動,它就是非互動式shell。

互動式非登入shell,例如你在Gnome圖形介面中開啟“終端”出來的那種視窗程式,和登入shell相比,它是“非登入”的,你並不需要輸入使用者名稱和密碼,和非互動式shell相比,這是“互動式”的,就像你說的那它“你輸入什麼,它就解釋什麼”。

對於Bash來說,登入shell(包括互動式登入shell和使用“–login”選項的非互動shell),它會首先讀取和執行/etc/profile全域性配置檔案中的命令,然後依次查詢~/.bash_profile、~/.bash_login 和 ~/.profile這三個配置檔案,讀取和執行這三個中的第一個存在且可讀的檔案中命令。除非被“–noprofile”選項禁止了。


在非登入shell裡,只讀取 ~/.bashrc (和 /etc/bash.bashrc、/etc/bashrc )檔案,不同的發行版裡面可能有所不同,如RHEL6.3中非登入shell僅執行了“~/.bashrc”檔案(沒有執行/etc/bashrc),而KUbuntu10.04中卻依次執行了/etc/bash.bashrc 和 ~/.bashrc 檔案。

對於這些規則,可以直接在相應的配置檔案中加一些echo命令來驗證其真實性。