如何在不替换当前 shell 的情况下重新加载 ZSH 配置文件?

How do I reload ZSH config files without replacing the current shell?

如何告诉 ZSH 重新加载自己,就好像它是新调用的 shell,但又不丢失历史记录?

这样做的背景是我花了很长时间构建我的 ZSH 设置,如果我当前的机器出现故障,或者驱动器损坏等,我不想失去它。为此,我将我所有的本地 ZSH 配置文件放在 git 存储库中。到目前为止没有新内容。

但现在我想向存储库添加一个 'install' 脚本,以简化在新机器上安装我的设置的过程。安装文件后(实际上是在 ${ZDOTDIR-~} 中创建的符号链接指向存储库中的文件),我希望脚本重新加载它们,而不用通过 exec 替换当前进程(因此丢失历史记录),并且没有一个一个地获取文件(并冒着我可能以错误的顺序加载它们或错过 ZSH 启动过程的其他部分的可能性)。

ZSH 中是否内置了一些工具,或者是否有其他方法告诉它重新加载所有内容,就像它是一个新启动的实例一样,同时保留命令历史记录?

编辑:哈。嗯.. hrm.. 当然,我现在已经删除了我的 .zshrc 和 .zlogin,虽然后者不是很大的困难(它只是有 RVM 的设置在里面,很容易恢复)。然而,前者 伤害 。任何可以告诉我如何从 shell 中 恢复 .zshrc 的人都可以获得我所有的超级奖励积分。当然,对原始问题的回答仍将被标记为已接受。

我遇到了问题。我写了一个 shell 脚本。 Now I have two problems:)

通常 source ~/.zshrc 应该可以做到。

您可以启用选项 INC_APPEND_HISTORY。来自联机帮助页:

INC_APPEND_HISTORY

This options works like APPEND_HISTORY except that new history lines are added to the $HISTFILE incrementally (as soon as they are entered), rather than waiting until the shell exits. The file will still be periodically re-written to trim it when the number of lines grows 20% beyond the value specified by $SAVEHIST (see also the HIST_SAVE_BY_COPY option).

这样您就可以 exec zsh 而不会丢失历史记录。

这有点旧,但您始终可以向 .zshrc 添加一个函数,为您获取所有配置文件。

function reload(){
       source ~/.zshrc
       source ~/.zshenv
       ...
   }

所以您所要做的就是 reload 在您的 shell.

如果

source .zshrc

产出

source: no such file or directory: .zshrc,

你应该 运行 下面的命令

. ~/.zshrc

为了尊重 ZDOTDIR,它应该由 .zshenv 设置,使用这个组合:

source $HOME/.zshenv && source ${ZDOTDIR:-$HOME}/.zshrc