參考《linux命令、編輯器與shell編程》(清華大學出版社)
當啟動shell時,它將運行開機檔案來初始化自己。具體運行哪個檔案取決於該shell是登陸shell還是非登陸shell的互動方式(比如通過bash),又或者是一個非互動式shell(用來執行shell指令碼)。要執行開機檔案中的命令,使用者就必須具備讀的許可權,而一般的Linux發行版本都會把對應的命令放在一些開機檔案中。
1:互動式登陸shell
互動式登陸shell指的是當使用者登入系統時所用的那個shell(可以預設指定,如bash shell)。登入shell 將尋找幾個不同的開機檔案來處理其中的命令, bash shell 處理檔案的順序如下:
/etc/profile shell首先執行/etc/profile中的命令。設定這個檔案後,可以為系統內所有的bash使用者建立預設的特徵(不同版本的Linux在此檔案放置的命令不盡相同);
~/.bash_profile、~/.bash_login、~/.profile 然後shell依次尋找這些檔案,並執行它找到的第一個檔案中的命令。可以將命令放在這些檔案中,以重寫/etc/profile檔案中預設的設定;
~/.bash_logout 當使用者登出時,bash執行檔案~/.bash_logout中的命令,這個檔案包含了退出會話時執行的清理命令,如:刪除臨時檔案等;
2:互動式非登陸shell
互動式非登陸shell指的是如果啟動了一個bash shell 而沒有等錄系統(如在CLI 提示符中鍵入bash),則啟動了一個互動式非登入shell。互動式非登入shell並不執行前面提到的開機檔案中的命令,然而互動式非登陸shell從登入shell繼承了由這些開機檔案設定的shell變數。
/etc/bashrc 儘管不是通過bash直接調用,但許多~/.bashrc檔案調用/etc/bashrc。這種設定使得超級使用者可以為系統內的非登陸shell建立預設屬性。
.bashrc 互動式非登陸shell執行~/.bashrc檔案中的命令,而登陸shell的開機檔案(如.bash_profile)通常會運行這個檔案。這樣,登陸shell和非登陸shell都可以運行.bashrc中的命令了。
3:非互動式shell
非互動式shell指的是以shell script(指令碼)方式運行。在這種模式在運行時shell 並不與使用者進行互動(除非在運行時需要使用者指定運行參數),而是讀取存放在檔案中的命令並執行它們。當它讀到檔案的結尾,shell 也就終止了。這些shell從登陸時就繼承了由這些開機檔案設定的shell變數。
BASH_ENV 非互動式shell尋找環境變數BASH_ENV(或者當作為sh調用時為的ENV),並執行由該變數命名的檔案中的命令。