bash shell具體可以分為3種類型,這3種類型為:
1 login shell
就是需要輸入用戶名和密碼才能登陸的shell
2 可交互的非login shell
就是不用登陸的,但是可以同用戶進行交互的shell,比如在父shell當中執行bash命令產生的子shell就是一個可交互的非login shell
3 不可交互的非login shell
這類shell通常都是系統自己使用
對於第三類不可交互的非login shell,如果想要讓shell啟動之前讀取相應配置文件,可以通過設置BASH_ENV環境變量來實現。當把要執行的配置文件賦給這個變量時,那么不可交互的非login shell就可以通過BASH_ENV的值來執行相關的配置文件
對於第一類的login shell和第二類可交互的非login shell,涉及到的配置文件分別位於/etc和$HOME目錄下,如下圖所示:

/etc目錄下面包含profile,bashrc文件和profile.d目錄(其中包含各種自頂一個的.sh文件);
$HOME目錄下包含.bash_profile|.bash_login|.profile(shell的搜索順序按照這個順序進行,找到一個就不會在找下一個。如果想知道自己的shell到底使用哪個配置文件,也可以通過man bash查看)和.bashrc。
當logins shell執行時,配置文件讀取額流程如下圖所示:

login shell首先讀取/etc/profile文件,/etc/profile會調用執行/etc/profile.d目錄下的.sh文件,然后shell讀取$HOME目錄下的.bash_profile|.bash_login|.profile,然后.bash_profile|.bash_login|.profile會調用.bashrc,.bashrc會調用/etc/bashrc,/etc/bashrc會調用執行/etc/profile.d目錄下的.sh文件
當可交互的非login shell執行時,配置文件的讀取流程如下圖所示:

可交互的非login shell首先讀取.bashrc,同上面一樣,.bashrc調用/etc/bashrc,/etc/bashrc調用執行/etc/profile.d目錄下面的.sh文件。
