Linux中.bashrc與.bash_profile的對比
- 2020 年 8 月 12 日
- 筆記
如果你平時在命令行上花費了大量時間,那麼你可能會萌生出希望定製 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 文件中,示例如下:
這意味着每次登錄到終端時,上面兩個文件都會被讀取並執行其中的命令。
大多數 Linux 發行版都是使用 ~/.profile 而不是 ~/.bash_profile。因為 ~/.profile 文件可以被所有 Shell 讀取,而 ~/.bash_ profile 僅能被 Bash Shell 讀取。
如果你的系統上沒有我上面所講的這些啟動文件,那麼你也可以自己創建它們。
結論
最後,總結一下今天我們所講的重點。.bash_profile 和 .bashrc 是在調用 Bash 時運行的包含 Shell 命令的文件。.bash_profile 可以在交互式登錄 Shell 上被讀取和執行,而 .bashrc 可以在非登錄 Shell 上被讀取和執行。
如果你還對 .bashrc 這些文件有疑問或是有修改 Shell 提示符的更好的方法,請留言告訴我唄!
公眾號:良許Linux