文章目錄
- login shell vs non-login shell
- .bash_profile vs .bashrc
- 那到底寫到哪個檔案呢?
在 Unix* Like 環境下工作時,不免會遇到 bash 環境變數的配置。而每次面對 $HOME 目錄下的一些 .bash* 檔案時,總會暫時性的忘記該修改那個好。
實際中在那個檔案中添加配置資訊都沒有問題,都可以正常工作。那為什麼要設定兩個設定檔呢?它們的區別是什嗎?
尋找 bash 的協助文檔。可以找到下面的描述。
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-shell startup file
.bash_profile 在登入 shell 時執行,而 .bashrc 會在不是以 login 方式開啟 shell 時執行(比如執行 /bin/bash )。
login shell vs non-login shell
不論你是坐在電腦旁或者通過 ssh 遠程登入主機,以使用者名稱/密碼登入終端時,.bash_profile 都會在初始化命令列提示符之前執行。
如果你已登入到機器上,並且在 Gnome 或 KDE 案頭下開啟了一個新的終端(通常這種方式開啟 xterm),那麼 .bashrc 會在初始化命令列提示符之前執行。當然上面提到的,通過在終端執行 /bin/bash 開啟一個新的 bash 樣本時,同樣也會調用 .bashrc 。
.bash_profile vs .bashrc
舉例來說,如果你想在每次登入機器時,都在終端印表機器的診斷資訊(目前使用者,記憶體使用量、負載平衡等),則需要將配置資訊寫入 .bash_profile。而如果你想在每次開啟終端時進行提示,則記入 .bashrc 。
這樣做的好處是針對某些應用情境,可以進行更精細的配置。
上面的描述並不適用於 Mac OS ,對於 Terminal.app ,每次運行時,都只執行 .bash_profile。
那到底寫到哪個檔案呢?
大多數情況下,你不想為 login shell 和 non-login shell 兩種方式分別維護設定檔,因為實際上維護的這兩個設定檔通常用完成相似的工作。比如設定 PATH 環境變數,希望在兩種方式下都能正常執行,你可以在 .bash_profile 中執行 source .bashrc 命令,並將 PATH 變數設定資訊存放到 .bashrc 中。
vim ~/.bash_profile if [ -f ~/.bashrc ]; then source ~/.bashrc fi
這種情況下,在 login 到機器時,.bashrc 檔案也會被執行。
現在新版的 Linux 通常也都已經考慮到了這個問題,通常都會在 .bash_profile 中添加如下的代碼:
[root@vsso ~]# cat .bash_profile # .bash_profile# Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi# User specific environment and startup programsPATH=$PATH:$HOME/binexport PATHunset USERNAME
所以一般性的共通內容,都可以寫入到 .bashrc 檔案中。