重新加载 .zshrc 的推荐方法? (`source` VS `exec`?)

Recommended method for reloading `.zshrc`? (`source` VS `exec`?)

大多数人似乎建议使用 source 重新加载 .zshrc。为什么?

首先我尝试了 source ~/.zshrc。但它导致了 compinit 错误(在重新加载时,不是新的 shell 实例首先 .zshrc 加载)。

我的重新加载别名现在是:

alias zsh-reload="exec zsh"

而不是:

source ~/.zshrc

这是因为我之前的reload方法(source)触发了compinit错误;

zsh compinit: insecure directories, run compaudit for list.
Ignore insecure directories and continue [y] or abort compinit [n]?

所以我现在正在做 exec 因为我相信它可以确保以前的环境不会污染新环境。

使用 exec,shell 中的所有(未导出的)变量都将丢失,这可能不是您想要的。相反,使用 compinit -i 修复 compinit 问题可能会更好。请参阅 compinit 的 zsh 手册页,段落 compinit 的使用:

to make compinit silently ignore all insecure files and directories use the option -i