.zshenv、.zshrc、.zlogin、.zprofile、.zlogout 中应该/不应该做什么?

kjo*_*kjo 280 startup zsh

我正在寻找关于应该和不应该包含在zsh.

我了解这些文件的来源顺序,以及它们的来源条件,但我仍然不清楚每个文件应该包含什么。

小智 308

以下是每个文件往往包含的内容的非排他性列表:

  1. 由于.zshenv始终是源代码,因此它通常包含应该可供其他程序使用的导出变量。例如,$PATH$EDITOR、 和$PAGER通常设置在 中.zshenv。此外,您还可以设置$ZDOTDIR.zshenv指定的zsh的其余配置中的其他位置。
  2. .zprofile基本上是一样的.zlogin,除了在此之前,它的来源.zshrc,而.zlogin之后其来源.zshrc。根据 zsh 文档,.zprofile是作为.zloginksh 粉丝的替代品;两者不打算一起使用,尽管如果需要,当然可以这样做。”
  3. .zshrc用于交互式外壳配置。您可以使用setoptunsetopt命令为交互式 shell 设置选项。您还可以加载 shell 模块、设置历史选项、更改提示、设置 zle 和完成等。您还可以设置仅在交互式 shell 中使用的任何变量(例如$LS_COLORS)。
  4. .zlogin源自登录外壳程序的开始,但.zshrc如果外壳程序也是交互式的。该文件通常用于使用startx. 一些系统在启动时启动 X,所以这个文件并不总是很有用。

.zlogout有时用于清除和重置终端。它在退出时调用,而不是在打开时调用。

您应该查看随机 Github 用户的配置文件,以更好地了解每个文件应包含的内容。

  • 只是为了我自己的笔记/确认并帮助其他人,最终顺序是`.zshenv`→[`.zprofile`如果登录]→[`.zshrc`如果交互]→[`.zlogin`如果登录]→[ `.zlogout` 有时]。 (78认同)
  • 请注意,在 .zshenv 中设置 ``$PATH`` 时,各种其他文件都来源于此文件,这些文件将覆盖此值。参见 http://www.zsh.org/mla/users/2003/msg00600.html。 (13认同)
  • 回复:在 `.zshenv` 中设置 `$PATH` - macOS,从 Big Sur 和至少之前的几个版本开始 - 在执行 `/etc/zprofile` 时(在 `.zshenv` 之后)覆盖对 `$PATH` 的任何更改)。 (3认同)
  • @BeauBarker $PATH 应该位于 `.zshrc` 中吗? (3认同)
  • @alper GitHub 用户 `thoughtbot` 的流行点文件确实[建议在 `.zshrc` 中设置 $PATH](https://github.com/thoughtbot/dotfiles/blob/65cc8ef0848805395a8d21c9cb7d077874dd430d/zshenv#L20-L22)。 (2认同)

小智 91

在我看来,这里列出了每个文件应该/不应该包含的内容:

.zshenv

[每次阅读]

这个文件总是有源的,所以它应该设置需要经常更新的环境变量。PATH(或其关联的对应路径)是一个很好的例子,因为您可能不想重新启动整个会话以使其更新。通过在该文件中设置它,重新打开终端模拟器将启动一个新的 Zsh 实例,其中PATH值已更新。

但请注意,即使启动 Zsh 以运行单个命令(使用-c选项),即使是其他工具(如make. 您应该非常小心,不要修改标准命令的默认行为,因为它可能会破坏某些工具(例如通过设置别名)。

.zprofile

[登录时阅读]

我个人将该文件视为.zshenv应该设置一次或不需要经常更新的命令和变量:

  • 用于配置工具的环境变量(编译标志、数据文件夹位置等)
  • 执行命令(如SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))")的配置,因为它可能需要一些时间来执行。

如果修改此文件,则可以通过运行登录 shell 来应用配置更新:

exec zsh --login
Run Code Online (Sandbox Code Playgroud)

.zshrc

[互动时阅读]

我把所有只需要交互使用的东西放在这里:

  • 迅速的,
  • 命令完成,
  • 命令修正,
  • 命令建议,
  • 命令突出显示,
  • 输出着色,
  • 别名,
  • 键绑定,
  • 命令历史管理,
  • 其他杂项交互工具(auto_cd、manydots-magic)...

.zlogin

[登录时阅读]

这个文件很像.zprofile,但在.zshrc. 您可以考虑在 .zlogin 执行时完全设置 shell

因此,我使用它来启动不修改外壳行为的外部命令(例如登录管理器)。

.zlogout

[注销时阅读][在登录外壳内]

在这里,您可以清除终端或登录时设置的任何其他资源。

我如何选择放置设置的位置

  • 如果非交互式运行命令需要它:.zshenv
  • 如果它应该在每个新 shell 上更新.zshenv
  • 如果它运行的命令可能需要一些时间才能完成.zprofile
  • 如果它与交互式使用有关.zshrc
  • 如果它是在完全设置 shell 时运行命令.zlogin
  • 如果它释放登录时获取的资源.zlogout