Bashrc

什麼時候應該使用 .bashrc,什麼時候應該使用 .profile?

  • October 21, 2018

我基本上把我所有的設置都放在了我的 .bashrc 中,而當我使用 zsh 時,它都放在了我的 .zshrc 中。

Rust 安裝程序剛剛通知我,它已通過修改 .profile 將新安裝添加到我的 PATH 中。

事情應該什麼時候進入~/.profile

這樣做是因為它不知道我正在使用哪個 shell,還是應該在 .profile 中使用所有通用設置?

.profile由每個登錄 shell.xxxrc讀取,由每個互動式 shell 在讀取後讀取.profile.

您需要根據自己喜歡添加的內容來決定自己。

一個好主意是將設置導出的環境變數並因此傳播到子 shell 的所有內容放入 .profile 中。

沒有傳播的東西應該​​在 .bashrc 或者你的 shell 中的任何東西。這是例如別名和函式定義。

Bash 有一個相當複雜的邏輯,關於它執行哪些腳本以及何時執行。

但這主要歸結為:

  • 如果您有從父程序繼承到子程序的設置(環境變數,ulimits),您通常只需要在每次登錄時設置一次,因此將它們放入.profile而不是.bashrc.
  • 如果您的設置既是繼承的又是附加PATH的(例如,使用類似 的構造向 的現有值添加一些東西PATH=$PATH:/some/directory),那麼當您啟動另一個 shell 程序時,將這樣的設置放入.bashrc將導致該添加第二次發生,這將是愚蠢的和浪費。例如,如果您設置PATH=$PATH:/some/directoryin .bashrc,它在您的主 shell 中工作得很好。但是當你啟動一個編輯器然後使用它的 shell 轉義功能時,你可能會發現你的 PATH 現在有一個像...:/some/directory:/some/directory. 每一層子 shell 都會再次將目錄添加到 PATH 中。可繼承的、可加的設置通常最好放在.profile.
  • 如果您的設置沒有在正常程序之間繼承,例如 shell 別名或函式,您需要在.bashrc. 如果您在 中定義它們.profile,您會發現它們在開始在各種應用程序中使用 shell 轉義功能的 shell 中不可用。(這也意味著您可能希望在您.bashrc的末尾添加一個命令來獲取您的原始碼,.profile以便會話的主登錄 shell 也將獲得這些定義,除非您的發行版的標准/etc/profile或預設值.profile已經提供了該功能。)

使用圖形使用者界面,還有一個更複雜的問題。GUI 會話通常會.profile在登錄時獲取或等效的內容(因為相應的會話啟動腳本作為登錄 shell 執行),因此在那裡進行的任何可繼承設置通常會被桌面環境繼承,反過來,任何使用桌面圖示或菜單啟動的應用程序。

X11 GUI 會話中的任何終端視窗都可以通過以下兩種方式之一進行設置:

  • 完全獨立的終端會話:每個終端視窗都被視為一個獨立的登錄會話,並且該環境是根據終端仿真器程序中 shell 的一些基本系統範圍預設值建構的。在這種情況下,每個新的終端視窗都將作為登錄 shell 執行,因此.profile在打開時將執行或等效。
  • 每個終端視窗都被視為主 GUI 登錄會話的一部分:在這種情況下,終端視窗內的 shell 作為非登錄 shell 啟動,並且只會執行.bashrc或等效。可繼承設置通過桌面環境/視窗管理器程序從主 GUI 登錄會話繼​​承。

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