我剛剛升級到 macOS Catalina,新的 shell 是 ZSH。因此,由於這是一個全新的開始,我嘗試使用別名、函數等來設定我的 shell 環境,就像在 bash 中一樣。當我在文件
然後從 讀取命令
$ZDOTDIR/.zshenv
。如果 shell 是登入 shell,則從 讀取命令/etc/zprofile
,然後 讀取命令$ZDOTDIR/.zprofile
。然後,如果 shell 是互動的,則從/etc/zshrc
和 then讀取命令$ZDOTDIR/.zshrc
。最後,如果shell是登入shell,/etc/zlogin
則$ZDOTDIR/.zlogin
讀取。
令人困惑的部分...
- 如果它是一個登入 shell,它會讀取
/etc/zprofile
然後$ZDOTDIR/.zprofile
- 最後,如果shell是登入shell,
/etc/zlogin
則$ZDOTDIR/.zlogin
讀取。
如果我透過 SSH 連線到我的 Mac,它就是一個登入 shell。那麼既然我需要配置它,我需要(或應該)修改哪些檔案?我想幫助回答這個問題可能有助於理解.zprofile
和之間的區別.zlogin
所以,這裡的任何指導都會很棒。
答案1
檔案*profile
和*login
檔案在相同的條件下讀取:當且僅當 shell 是登入 shell(並且不使用諸如 之類的選項呼叫no_rcs
)。該手冊單獨列出了它們,因為它們的調用順序與文件相關*rc
。
這個名字*profile
來自sh
,伯恩外殼(其中 ksh、bash、dash 等大多是具有額外功能的重新實現)。這個名字*login
來自於西施。 Zsh 更像 sh,但具有兩者的功能,所以我想這就是它支援這兩個名稱的原因。
*profile
通常,使用或並不重要*login
。但*profile
檔案的優點是它們會在 之前讀取*rc
,因此如果您的*rc
內容取決於來自的設定*profile
(例如,如果您呼叫位於新增至 的.zshrc
目錄中的程式),則需要使用而不是。.zprofile
$PATH
*profile
*login
因此,將登入時配置(通常主要是環境變數)放在 中~/.profile
,並將互動式配置(提示、完成、鍵綁定、別名等)放在 中~/.zshrc
。您很少需要其他啟動文件。