1.配置檔案說明
系統級的配置檔案
配置檔案 | 描述 |
---|---|
/etc/profile |
系統級的全域性配置檔案,在使用者登入時由Bash首先讀取(如果是登入 shell)。 |
/etc/profile.d/* |
這裡面的指令碼通常由/etc/profile呼叫,用於更靈活地進行系統級的環境變數設定和初始化任務等。 |
/etc/bashrc |
為每一個執行bash shell的使用者執行此檔案,當bash shell被開啟時,該檔案被讀取,有些linux版本中的/etc目錄下已經沒有了bashrc檔案。 |
使用者級的配置檔案
配置檔案 | 描述 |
---|---|
~/.bash_profile |
使用者級的登入shell配置檔案,如果存在,在使用者登入時被讀取。 |
~/.bash_login |
如果~/.bash_profile 不存在,Bash 會嘗試查詢這個檔案作為使用者級登入 shell 的配置檔案。 |
~/.profile |
如果前兩者都不存在,就執行這個檔案作為使用者級登入shell的配置檔案。 |
~/.bashrc |
在某些情況下,如從登入shell啟動一個新的互動式非登入shell,或者在~/.bash_profile (或其他登入shell配置檔案)中顯式呼叫時,這個檔案會被讀取執行,用於設定互動式非登入shell的環境和別名等。 |
~/.bash_login |
是一個使用者級的 Bash 配置檔案,主要在使用者退出Bash會話(尤其是互動式登入 shell 會話)時執行。 |
2.載入順序
shell互動式登入
stateDiagram-v2
shell登入 --> /etc/profile
/etc/profile --> /etc/profile.d/*
/etc/profile.d/* --> HOME
HOME --> ~/.bashrc : 被前序指令碼觸發
~/.bashrc --> /etc/bashrc : 被前序指令碼觸發
~/.bashrc --> shell退出 :
shell退出 --> ~/.bash_logout : 被自動觸發
state HOME {
direction LR
~/.bash_profile --> ~/.bash_login : 不存在觸發
~/.bash_login --> ~/.profile : 不存在觸發
}
非shell互動式登入
- 1.如透過某些特殊方式啟動非互動式shell並明確指定載入
~/.bashrc
。 - 2.或者從一個已經載入了
~/.bashrc
的互動式shell啟動非互動式shell且有機制將當前環境傳遞給新的shell,可能會間接導致~/.bashrc
的部分效果在非互動式shell中體現。
stateDiagram-v2
direction LR
非互動式shell --> ~/.bashrc : 有可能被載入
非互動式shell --> /etc/bashrc : 有可能被自動載入
~/.bashrc --> /etc/bashrc : 有可能被前序指令碼觸發
3.示例
~/.bash_profile
#!/bin/bash
# ...其他內容
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
~/.bashrc
#!/bin/bash
# ...其他內容
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi