我刚刚升级到 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
。您很少需要其他启动文件。