今天在學習Linux環境變量相關知識時,發現教程上初始化過程讀取的文件和我使用機器讀取的文件不一樣!后來發現教程使用的是<code>Bourne Shell</code>,而我使用的是<code>bash shell</code>!于是就上網查詢<code>bash shell</code> 的初始化過程!轉自:Linux社區
文件的加載時機
-
/etc/profile
全局(公有)配置,不管是哪個用戶,登錄時都會讀取該文件。 -
/ect/bashrc
Ubuntu
沒有此文件,與之對應的是/ect/bash.bashrc
它也是全局(公有)的
bash
執行時,不管是何種方式,都會讀取此文件。 -
~/.profile
若bash
是以login
方式執行時,讀取~/.bash_profile
,若它不存在,則讀取~/.bash_login
,若前兩者不存在,讀取~/.profile。
另外,圖形模式登錄時,此文件將被讀取,即使存在~/.bash_profile
和~/.bash_login
。 -
~/.bash_login
若bash
是以login
方式執行時,讀取~/.bash_profile
,若它不存在,則讀取~/.bash_login
,若前兩者不存在,讀取~/.profile
。 -
~/.bash_profile
Unbutu
默認沒有此文件,可新建。
只有bash
是以login
形式執行時,才會讀取此文件。通常該配置文件還會配置成去讀取~/.bashrc
。 -
~/.bashrc
當bash
是以non-login
形式執行時,讀取此文件。若是以login
形式執行,則不會讀取此文件。 -
~/.bash_logout
注銷時,且是longin
形式,此文件才會讀取。也就是說,在文本模式注銷時,此文件會被讀取,圖形模式注銷時,此文件不會被讀取。
下面是在本機的幾個例子:
- 圖形模式登錄時,順序讀取:
/etc/profile
和~/.profile
- 圖形模式登錄后,打開終端時,順序讀取:
/etc/bash.bashrc
和~/.bashrc
- 文本模式登錄時,順序讀取:
/etc/bash.bashrc
,/etc/profile
和~/.bash_profile
- 從其它用戶
su
到該用戶,則分兩種情況:
(1)如果帶-l
參數(或-參數,--login
參數),如:su -l username
,則bash
是login
的,它將順序讀取以下配置文件:/etc/bash.bashrc
,/etc/profile
和~/.bash_profile
。
(2)如果沒有帶-l
參數,則bash
是non-login
的,它將順序讀取:/etc/bash.bashrc
和~/.bashrc
- 注銷時,或退出
su
登錄的用戶,如果是longin
方式,那么bash
會讀取:~/.bash_logout
- 執行自定義的
shell
文件時,若使用bash -l a.sh
的方式,則bash
會讀取行:/etc/profile
和~/.bash_profile
,若使用其它方式,如:bash a.sh
,./a.sh
,sh a.sh
(這個不屬于bash shell
),則不會讀取上面的任何文件。 - 上面的例子凡是讀取到
~/.bash_profile
的,若該文件不存在,則讀取~/.bash_login
,若前兩者不存在,讀取~/.profile
。