重新加载 .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
方法的缺点是什么?
- 您这样做是否有明确的原因
exec
或 source
?
- 理论上
exec
与 source
方法相比会导致意想不到的问题吗?
使用 exec
,shell 中的所有(未导出的)变量都将丢失,这可能不是您想要的。相反,使用 compinit -i
修复 compinit 问题可能会更好。请参阅 compinit 的 zsh 手册页,段落 compinit 的使用:
to make compinit silently ignore all insecure files and directories use the option -i
大多数人似乎建议使用 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
方法的缺点是什么? - 您这样做是否有明确的原因
exec
或source
? - 理论上
exec
与source
方法相比会导致意想不到的问题吗?
使用 exec
,shell 中的所有(未导出的)变量都将丢失,这可能不是您想要的。相反,使用 compinit -i
修复 compinit 问题可能会更好。请参阅 compinit 的 zsh 手册页,段落 compinit 的使用:
to make compinit silently ignore all insecure files and directories use the option -i