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


130

我正在寻找有关应该和不应该在的各种启动文件中包括什么的指南zsh

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


Answers:


155

这是每个文件倾向于包含的内容的非排他性列表:

  • 由于.zshenv始终是源程序,因此它通常包含导出的变量,这些变量应可供其他程序使用。例如$PATH$EDITOR$PAGER经常被设定.zshenv。此外,您还可以设置$ZDOTDIR.zshenv指定的zsh的其余配置中的其他位置。
  • .zshrc用于交互式外壳程序配置。您可以使用setoptunsetopt命令在此处设置交互式外壳程序的选项。您还可以加载外壳模块,设置历史记录选项,更改提示,设置zle和完成等等。您还设置了仅在交互式外壳程序中使用的任何变量(例如$LS_COLORS)。
  • .zlogin源于登录shell的开始。该文件通常用于使用启动X startx。某些系统在启动时启动X,因此此文件并不总是非常有用。
  • .zprofile基本上与之前相同,.zlogin只是直接在.zshrc来源之前而不是之后直接来源。根据zsh文档,.zprofile对于ksh爱好者来说,它是`.zlogin'的替代方案;尽管可以根据需要当然也可以将两者一起使用。”
  • .zlogout 有时用于清除和重置终端。

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


3
出于清晰起见,.zlogin源自.zshrc之后(man zshall有关详细信息,请参见)。
亚伦

8
请注意,在中设置$PATH.zshenv,所有其他文件都将在此文件之后覆盖该值。参见zsh.org/mla/users/2003/msg00600.html
Beau Barker

凡应该$LANG并且$LC_ALL去了?
Lenar Hoyt

23
只是为了我自己的笔记/确认并为了帮助其他人,最终的顺序是.zshenv→[ .zprofile如果登录]→[ .zshrc如果是交互式的]→[ .zlogin如果登录]→[ .zlogout有时]。
加百利L.16年

23

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

.zshenv

[每次阅读]

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

但是请注意,即使启动Zsh来运行单个命令(带有-c选项),也可以通过诸如之类的其他工具读取该文件make。您应该非常小心,不要修改标准命令的默认行为,因为它可能会破坏某些使用它们的工具(例如,通过设置别名)。当然,您知道自己在做什么并不是禁止的。

.zprofile

[登录时阅读]

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

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

如果修改该文件,则可以通过将当前的shell替换为新的shell作为登录shell来获取配置更新:

exec zsh --login

.zshrc

[互动阅读]

我在这里放置了仅用于交互式使用的所有内容

  • 提示,
  • 命令完成
  • 命令更正,
  • 命令建议,
  • 命令高亮显示
  • 输出着色,
  • 别名,
  • 按键绑定
  • 命令历史记录管理,
  • 其他各种互动工具(auto_cd,mandots-magic)...

.zlogin

[登录时阅读]

该文件类似于.zshprofile,但在读取之后.zshrc。我认为此时外壳已完全安装好。

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

.zlogout

[注销时阅读] [在登录shell中]

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

我如何选择放置位置

  • 非交互运行命令需要它:.zshenv
  • 它应该在新的外壳更新.zshenv
  • 它运行的命令可能需要一些时间才能完成.zprofile
  • 它与交互式用法有关.zshrc
  • 这是外壳完全安装时要运行命令.zlogin
  • 释放登录时获取的资源.zlogout

0

不要打入ssh-agent电话.zshenv。它导致我的less命令不再显示任何文本文件,这可能是因为其选项是由Prezto(export LESS='-F -g -i -M -R -S -w -X -z-4'在中.zprofile)自定义的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.