我正在寻找有关应该和不应该包含在zsh
.
我了解这些文件的来源顺序以及来源条件,但我仍然不清楚每个文件中应该包含什么内容。
答案1
以下是按执行顺序排列的每个文件往往包含的内容的非详尽列表:
.zshenv
是总是来源。它通常包含应可供其他程序使用的导出变量。例如,$PATH
、$EDITOR
、 和$PAGER
经常设置在 中.zshenv
。此外,您还可以设置$ZDOTDIR
为.zshenv
zsh 配置的其余部分指定替代位置。.zprofile
用于登录 shell。它基本上与 相同,.zlogin
只是它是在 before 之前获取的.zshrc
,而.zlogin
在 之后获取的.zshrc
。根据 zsh 文档,“.zprofile
旨在作为.zlogin
ksh 粉丝的替代方案;两者不打算一起使用,尽管如果需要的话当然可以这样做。”.zshrc
用于交互式 shell。您可以使用setopt
和命令设置交互式 shell 的选项unsetopt
。您还可以加载 shell 模块、设置历史选项、更改提示、设置 zle 和完成等。您还可以设置仅在交互式 shell 中使用的任何变量(例如$LS_COLORS
)。.zlogin
用于登录 shell。它源自登录 shell 的启动但之后(.zshrc
如果 shell 也是交互式的)。该文件通常用于使用startx
.有些系统在启动时启动 X,因此该文件并不总是很有用。.zlogout
有时用于清除和重置终端。它是在退出时调用,而不是在打开时调用。
你应该经历随机 Github 用户的配置文件更好地了解每个文件应包含的内容。
答案2
在我看来,这里列出了每个文件应该/不应该包含的内容:
.zshenv
[每次阅读]
该文件始终是来源的,因此应该设置需要的环境变量经常更新。小路(或其相关对应物小路)是一个很好的例子,因为您可能不想重新启动整个会话来使其更新。通过在该文件中设置它,重新打开终端模拟器将启动一个新的 Zsh 实例,其中包含小路值已更新。
但请注意,该文件是即使启动 Zsh 来运行单个命令也可以读取(与-C选项),甚至通过其他工具,如make
.你应该要非常小心,不要修改标准命令的默认行为因为它可能会破坏某些工具(例如通过设置别名)。
.z配置文件
[登录时阅读]
我个人对待该文件就像.zshenv
但对于应该设置一次或哪些命令和变量不需要经常更新:
- 用于配置工具的环境变量(编译标志、数据文件夹位置等)
- 执行命令(如
SCONSFLAGS="--jobs=$(( $(nproc) - 1 ))"
)的配置,因为执行可能需要一些时间。
如果修改此文件,您可以通过运行登录 shell 来应用配置更新:
exec zsh --login
.zshrc
[互动时阅读]
我把所有需要的东西都放在这里互动使用:
- 迅速的,
- 命令完成,
- 命令修正,
- 命令建议,
- 命令突出显示,
- 输出着色,
- 别名,
- 键绑定,
- 命令历史管理,
- 其他杂项交互工具(auto_cd、manydots-magic)...
.zlogin
[登录时阅读]
这个文件很像.zprofile
,但是是在之后读取的.zshrc
。您可以认为 shell 在 .zlogin 执行时已完全设置
因此,我使用它来启动不修改 shell 行为的外部命令(例如登录管理器)。
.zlogout
[注销时读取][在登录 shell 内]
在这里,您可以清除您的终端或登录时设置的任何其他资源。
我如何选择设置的位置
- 如果需要命令以非交互方式运行:
.zshenv
- 如果应该的话在每个新 shell 上更新:
.zshenv
- 如果它运行一个命令可能需要一些时间才能完成:
.zprofile
- 如果它与互动使用:
.zshrc
- 如果它是一个shell 完全设置后运行的命令:
.zlogin
- 如果它释放资源登录时获取:
.zlogout
答案3
对于那些来到这里希望找到一个易于记住和维护的简单解决方案的人来说,这是我使用和推荐的设置(至少对于 Mac OS 用户):
- 将所有常见内容放入 和 中
.zshenv
,.bash_env
其他现在应该为空并且可以删除(除非特定于 shell,请参阅步骤 4) - 确保
.zshenv
和中有相同的内容.bash_env
- 删除 的内容
.bash_env
并将其放入其中,这样您就可以将所有内容放在一个地方
if [ -f $HOME/.zshenv ]; then
source $HOME/.zshenv
fi
- 创建
.zlogin
,以便您可以在每个 shell 的基础上.bash_login
覆盖 的内容(因为它们在之后执行)。.zshenv/.bash_env
- (可选)不时监视
.zprofile
、.bash_profile
、.bashrc
、 ,因为某些安装程序可能会自动在其中创建和附加内容。.zshrc