1. 程式人生 > >Linux中.bashrc與.bash_profile的對比

Linux中.bashrc與.bash_profile的對比

如果你平時在命令列上花費了大量時間,那麼你可能會萌生出希望定製 **Shell** 環境的想法。今天本文就和大家講解該如何實現你們的這個想法。其實可以通過建立別名、向環境變數 `$PATH` 新增新目錄或更改 **Shell** 提示符的外觀以實現在命令列上節約時間。 在你尋找解決方法的過程中可能會看到過一些教程,比如說將配置檔案放在 **.bashrc** 或者 **.bash_ profile** 中,亦或是將配置放在另一個可以通過 **Bash Shell** 讀取和執行的檔案中。 接下來,我將向大家講解 **Bash** 啟動檔案以及 **.bashrc** 和 **.bash_ profile** 之間的區別: #### Interactive Login 和 Non-Login Shell **Bash** 被呼叫時,會從一組啟動檔案中讀取並執行命令,至於讀取哪些檔案取決於 **Shell** 是作為互動式登入呼叫還是作為非登入 **Shell** 呼叫。 其實,**Shell** 可以是互動式的,也可以是非互動式的。簡單一點地說,互動式 **Shell** 是一種讀寫使用者終端的 **Shell**,而非互動式 **Shell** 完全是與終端無關的 **Shell**。 值得注意的是,互動式 **Shell** 可以是登入 **Shell** ,也可以是非登入 **Shell**。 有幾種情況可以呼叫登入 **Shell**,一種是當用戶通過 `ssh` 或本地方式遠端登入到終端,還有就是使用 `--login` 選項啟動 **Bash** 。比如在 **Shell** 提示符中鍵入 `bash` 或開啟新的 **Gnome** 終端選項卡時。互動式非登入 **Shell** 從登入 **Shell** 呼叫。 #### Bash啟動檔案 當 **Bash** 作為互動式登入 **Shell** 被呼叫時,它將查詢 **/etc/profile** 檔案,如果該檔案存在,它將執行檔案中列出的命令。然後 **Bash** 按以下的順序搜尋 **~/.bash_profile** 、**~/.bash_login** 和 **~/.profile** 檔案,並在第一個找到的檔案中執行命令。 當 **Bash** 作為互動式非登入 **Shell** 被呼叫時,它從 **~/.bashrc** 檔案讀取並執行命令,需要指出的是該檔案必須存在並且它是可讀的才行。 #### .bashrc 和 .bash_配置檔案之間的差異 在 **Bash** 作為互動式登入 **Shell** 被呼叫的情況下,**.bash_profile** 才會被讀取、執行,而 **.bashrc** 是啟動互動式非登入 **Shell** 時才被執行的。一般使用 **.bash_profile** 來執行只執行一次的命令,比如執行自定義環境變數 `PATH` 的命令。 每次啟動新 **Shell** 時應該將執行的命令放在 **.bashrc** 檔案中,這些命令包括別名和函式、自定義提示、歷史自定義等。 通常,**~/.bash_profile** 包含的命令來源於 **.bashrc** 檔案中,示例如下: ![](https://img2020.cnblogs.com/other/1218435/202008/1218435-20200812202953712-1794407054.png) 這意味著每次登入到終端時,上面兩個檔案都會被讀取並執行其中的命令。 大多數 **Linux** 發行版都是使用 **~/.profile** 而不是 **~/.bash_profile**。因為 **~/.profile** 檔案可以被所有 **Shell** 讀取,而 **~/.bash_ profile** 僅能被 **Bash Shell** 讀取。 如果你的系統上沒有我上面所講的這些啟動檔案,那麼你也可以自己建立它們。 #### 結論 最後,總結一下今天我們所講的重點。**.bash_profile** 和 **.bashrc** 是在呼叫 **Bash** 時執行的包含 **Shell** 命令的檔案。**.bash_profile** 可以在互動式登入 **Shell** 上被讀取和執行,而 **.bashrc** 可以在非登入 **Shell** 上被讀取和執行。 如果你還對 **.bashrc** 這些檔案有疑問或是有修改 **Shell** 提示符的更好的方法,請留言告訴我唄! --- 公眾號:良許Linux ### 有收穫?希望老鐵們來個三連擊,給更多的人看到這