Login

為什麼同時擁有 .bash_profile 和 .bashrc?

  • February 20, 2017

.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_profilesource.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 讀取和執行命令。

引用自:https://unix.stackexchange.com/questions/346336