淺談Linux中.bashrc與.bash_profile
如果通常在命令行上花費(fèi)大量時(shí)間,則應(yīng)該自定義Shell環(huán)境。 在今天的這篇文章中,您將學(xué)習(xí)如何使您的想法變?yōu)楝F(xiàn)實(shí)。 實(shí)際上,您可以通過(guò)創(chuàng)建別名,將新目錄添加到$ PATH環(huán)境變量或更改Shell提示符的外觀來(lái)節(jié)省命令行時(shí)間。
在你尋找解決方法的過(guò)程中可能會(huì)看到過(guò)一些教程,比如說(shuō)將配置文件放在 .bashrc 或者 .bash_ profile 中,亦或是將配置放在另一個(gè)可以通過(guò) Bash Shell 讀取和執(zhí)行的文件中。
接下來(lái),我將向大家講解 Bash 啟動(dòng)文件以及 .bashrc 和 .bash_ profile 之間的區(qū)別:
Interactive Login 和 Non-Login Shell
Bash 被調(diào)用時(shí),會(huì)從一組啟動(dòng)文件中讀取并執(zhí)行命令,至于讀取哪些文件取決于 Shell 是作為交互式登錄調(diào)用還是作為非登錄 Shell 調(diào)用。
其實(shí),Shell 可以是交互式的,也可以是非交互式的。簡(jiǎn)單一點(diǎn)地說(shuō),交互式 Shell 是一種讀寫(xiě)用戶終端的 Shell,而非交互式 Shell 完全是與終端無(wú)關(guān)的 Shell。 值得注意的是,交互式 Shell 可以是登錄 Shell ,也可以是非登錄 Shell。
有幾種情況可以調(diào)用登錄 Shell,一種是當(dāng)用戶通過(guò) ssh 或本地方式遠(yuǎn)程登錄到終端,還有就是使用 --login 選項(xiàng)啟動(dòng) Bash 。比如在 Shell 提示符中鍵入 bash 或打開(kāi)新的 Gnome 終端選項(xiàng)卡時(shí)。交互式非登錄 Shell 從登錄 Shell 調(diào)用。
Bash啟動(dòng)文件
當(dāng) Bash 作為交互式登錄 Shell 被調(diào)用時(shí),它將查找 /etc/profile 文件,如果該文件存在,它將運(yùn)行文件中列出的命令。然后 Bash 按以下的順序搜索 ~/.bash_profile、~/.bash_login 和 ~/.profile 文件,并在第一個(gè)找到的文件中執(zhí)行命令。
當(dāng) Bash 作為交互式非登錄 Shell 被調(diào)用時(shí),它從 ~/.bashrc 文件讀取并執(zhí)行命令,需要指出的是該文件必須存在并且它是可讀的才行。
.bashrc 和 .bash_配置文件之間的差異
在 Bash 作為交互式登錄 Shell 被調(diào)用的情況下,.bash_profile 才會(huì)被讀取、執(zhí)行,而 .bashrc 是啟動(dòng)交互式非登錄 Shell 時(shí)才被執(zhí)行的。一般使用 .bash_profile 來(lái)運(yùn)行只運(yùn)行一次的命令,比如運(yùn)行自定義環(huán)境變量 PATH 的命令。
每次啟動(dòng)新 Shell 時(shí)應(yīng)該將運(yùn)行的命令放在 .bashrc 文件中,這些命令包括別名和函數(shù)、自定義提示、歷史自定義等。
通常,~/.bash_profile 包含的命令來(lái)源于 .bashrc 文件中,示例如下:
Linux中.bashrc與.bash_profile的對(duì)比
這意味著每次登錄到終端時(shí),上面兩個(gè)文件都會(huì)被讀取并執(zhí)行其中的命令。
大多數(shù) Linux 發(fā)行版都是使用 ~/.profile 而不是 ~/.bash_profile。因?yàn)?~/.profile 文件可以被所有 Shell 讀取,而 ~/.bash_ profile 僅能被 Bash Shell 讀取。
如果你的系統(tǒng)上沒(méi)有我上面所講的這些啟動(dòng)文件,那么你也可以自己創(chuàng)建它們。
結(jié)論
最后,總結(jié)一下今天我們所講的重點(diǎn)。.bash_profile 和 .bashrc 是在調(diào)用 Bash 時(shí)運(yùn)行的包含 Shell 命令的文件。.bash_profile 可以在交互式登錄 Shell 上被讀取和執(zhí)行,而 .bashrc可以在非登錄 Shell 上被讀取和執(zhí)行。