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

Jon*_*ter 5 shell scripting zsh zshrc

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

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

但是现在我想在存储库中添加一个"安装"脚本,以简化在新机器上安装我的设置的过程.一旦文件被安装(在$ {ZDOTDIR-〜}该点到文件存储库中的实际,创建符号链接),我希望脚本重新加载它们,而无需通过EXEC替换当前的进程(并因此失去了历史)并且没有逐个获取文件(冒着我可能以错误的顺序加载它们或者错过ZSH启动过程的其他部分的风险).

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

编辑:哈.嗯...当然,我现在已经把我的.zshrc和.zlogin消灭了,虽然后者不是很难(它只是有RVM的设置,很容易恢复).然而,前者会受伤.任何能告诉我如何从源自它的shell中恢复 .zshrc的人都获得了我所有的超级奖励积分.当然,原始问题的答案仍将被标记为已被接受.

我有一个问题.我写了一个shell脚本. 现在我有两个问题 :)

Fri*_*x G 59

对于oh-my-zsh用户

这是在不丢失终端的情况下重新加载 .zshrc 的方法

omz reload
Run Code Online (Sandbox Code Playgroud)

在这里找到: https: //github.com/ohmyzsh/ohmyzsh/wiki/Cheatsheet


kom*_*ten 9

通常source .zshrc应该这样做.


JoL*_*JoL 8

您可以启用该选项INC_APPEND_HISTORY。从联机帮助页:

INC_APPEND_HISTORY

此选项的工作方式与 APPEND_HISTORY 类似,不同之处在于新的历史行会以增量方式添加到 $HISTFILE 中(一旦输入),而不是等到 shell 退出。当行数增长超过 $SAVEHIST 指定的值 20% 时,该文件仍将定期重写以修剪它(另请参阅 HIST_SAVE_BY_COPY 选项)。

这样,您就可以在exec zsh不丢失历史记录的情况下进行操作。

  • 我认为这可能是最接近我想要做的事情。多谢。 (2认同)
  • @alper 将 `setopt inc_append_history` 添加到您的 `~/.zshrc` 中。 (2认同)

小智 5

这有点旧,但你总是可以向你的 .zshrc 添加一个函数,为你提供所有配置文件。

function reload(){
       source ~/.zshrc
       source ~/.zshenv
       ...
   }
Run Code Online (Sandbox Code Playgroud)

所以你所要做的就是reload在你的外壳中。

  • 顺序很重要。通常,`.zshenv` 被读取在 __before__ `.zshrc` 之前。 (3认同)

gdr*_*drt 5

如果

source .zshrc
Run Code Online (Sandbox Code Playgroud)

输出

来源:没有这样的文件或目录:.zshrc,

你应该运行下面的命令

. ~/.zshrc
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,您只需要获取完整路径:`source ~/.zshrc` (2认同)