為什麼同時擁有 .bash_profile 和 .bashrc?
.bash_profile
同時擁有和有什麼意義,.bashrc
前者通常採購後者,後者又/etc/bashrc
在登錄時採購?將.bashrc中的所有內容放在*.bash_profile*中(反之亦然)並僅獲取一個登錄腳本會有什麼缺點?
Only
.bashrc
在非登錄 shell 上執行,而 only.bash_profile
在登錄 shell 上執行。
.bashrc
通常應該包含您要在打開的每個 shell 中設置的內容,例如別名、函式等。這些是每個 shell 會話項,它們不是從環境繼承的。
.bash_profile
應該包含只需要在登錄時定義的東西,比如 PATH 和其他環境變數、啟動程序等。你只需要一次,而不是在你打開的每個 shell 中。在大多數情況下,您還需要.bashrc
登錄 shell 中的內容。這就是為什麼.bash_profile
source.bashrc
也是如此,但.bashrc
通常不 source.bash_profile
。
/etc/bashrc
並且/etc/profile
是由系統管理員或包管理器進行的系統範圍設置。/etc/profile
在每個登錄 shell 中自動獲取,之前~/.bash_profile
./etc/bashrc
沒有來源,所以需要的~/.bashrc
時候需要來源。現在,您可以將這兩個文件合併到一個文件中,並將另一個文件連結到第一個文件。但是您必須確保 PATH 和其他變數不是相對定義的(例如 PATH= $ HOME/bin: $ PATH),否則它們只會變得不必要地變大。此外,您必須小心重複啟動程序。將這兩個分開更容易。
bash 手冊頁中的相關部分:
當 bash 作為互動式登錄 shell 或作為帶有 –login 選項的非互動式 shell 呼叫時,它首先從文件 /etc/profile 中讀取並執行命令(如果該文件存在)。讀取該文件後,它會按順序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,然後從第一個存在且可讀的文件中讀取並執行命令。當 shell 啟動時,可以使用 –noprofile 選項來禁止這種行為。
當登錄 shell 退出時,bash 從文件 ~/.bash_logout(如果存在)讀取並執行命令。
當一個不是登錄 shell 的互動式 shell 啟動時,bash 會從 ~/.bashrc 讀取並執行命令,如果該文件存在的話。這可以通過使用 –norc 選項來禁止。–rcfile 文件選項將強制 bash 從文件而不是 ~/.bashrc 讀取和執行命令。