執行順序為:/etc/profile -> (~/.bash_profile |~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc ->~/.bash_logout
關於各個文件的作用域,在網上找到了以下說明:(1)/etc/profile:此文件為系統的每個用戶設置環境信息,當用戶第一次登錄時,該文件被執行,並從/etc/profile.d目錄的配置文件中搜集shell的設置。
(2)/etc/bashrc:為每一個運行bashshell的用戶執行此文件。當bashshell被打開時,該文件被讀取。
(3)~/.bash_profile:每個用戶都可使用該文件輸入專用於自己使用的shell信息,當用戶登錄時,該文件僅僅執行一次!默認情況下,他設置一些環境變量,執行用戶的.bashrc文件。
(4)~/.bashrc:該文件包含專用於你的bashshell的bash信息,當登錄時以及每次打開新的shell時,該該文件被讀取。
(5)~/.bash_logout:當每次退出系統(退出bashshell)時,執行該文件;另外,/etc/profile中設定的變量(全局)的可以作用於任何用戶,而~/.bashrc等中設定的變量(局部)只能繼承/etc/profile中的變量,他們是"父子"關系。
~/.bash_profile是交互式、login方式進入
bash 運行的
~/.bashrc 是交互式non-login 方式進入
bash運行的通常二者設置大致相同,所以通常前者會調用後者。
/etc/profile和/etc/environment等各種環境變量設置文件的用處先將exportLANG=zh_CN加入/etc/profile,退出系統重新登錄,登錄提示顯示英文。
將/etc/profile中的exportLANG=zh_CN刪除,將LNAG=zh_CN加入/etc/environment,退出系統重新登錄,登錄提示顯示中文。
用戶環境建立的過程中總是先執行/etc/profile然後在讀取/etc/environment。為什麼會有如上所敘的不同呢?
應該是先執行/etc/environment,後執行/etc/profile。
/etc/environment是設置整個系統的環境,而/etc/profile是設置所有用戶的環境,前者與登錄用戶無關,後者與登錄用戶有關。
系統應用程序的執行與用戶環境可以是無關的,但與系統環境是相關的,所以當你登錄時,你看到的提示信息,象日期、時間信息的顯示格式與系統環境的LANG是相關的,缺省LANG=en_US,如果系統環境LANG=zh_CN,則提示信息是中文的,否則是英文的。
對於用戶的SHELL初始化而言是先執行/etc/profile,再讀取文件/etc/environment.對整個系統而言是先執行/etc/environment。這樣理解正確嗎?/etc/enviroment --> /etc/profile--> $HOME/.profile -->$HOME/.env(如果存在)
/etc/profile是所有用戶的環境變量
/etc/enviroment是系統的環境變量
登陸系統時shell讀取的順序應該是
/etc/profile ->/etc/enviroment-->$HOME/.profile -->$HOME/.env
參考bash 手冊,執行.bash_profile是為了登錄shell的,但.bashrc是一個交互式的非登錄shells。
那什麼是登錄或非登錄shell呢?
當你或者在機器前,或者在遠程通過ssh,通過控制台進行登錄(輸入用戶名和密碼):在初始化命令行提示符的時候會執行.bash_profile來配置你的shell環境。但是如果你已經登錄到機器,你在Gnome或者是KDE也開了一個新的終端窗口(xterm),這時,.bashrc會在窗口命令行提示符出現前被執行。當你在終端敲入/bin/bash時.bashrc也會在這個新的bash實例啟動的時候執行。
那為什麼有兩個不同的文件呢?
比方說,你想字在每次登錄時打印一些關於你機器的很長的診斷信息,比如平均負載,內存使用情況,當前用戶,等等。你只希望在登錄的時候看到它們,所以你只需要把這些放在.bash_profile中。如果你放在.bashrc中,你會在每次打開一個新的終端窗口時看見這些信息。Mac OSX除外。
Mac OSX的終端窗口是個例外。每個終端窗口在打開的時候都會執行登錄shell即.bash_profile代替了.bashrc。其他的GUI終端仿真器到做的相同,但大多數情況下不這樣做。
建議
大多數的時候你不想維護兩個獨立的配置文件,一個登錄的一個非登錄的shell。當你設置PATH時,你想在兩個文件都適用。可以在.bash_profile中調用.bashrc,然後將PATH和其他通用的設置放到.bashrc中。
要做到這幾點,添加以下幾行到.bash_profile中:
if [ -f ~/.bashrc ]