澄清:ZSH 启动/关闭文件

澄清:ZSH 启动/关闭文件

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

相关内容