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

时间:2016-04-16 19:47:45

标签: shell scripting zsh zshrc

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

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

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

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

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

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

4 个答案:

答案 0 :(得分:7)

通常source .zshrc应该这样做。

答案 1 :(得分:2)

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

  

INC_APPEND_HISTORY

     

此选项与APPEND_HISTORY类似,但新历史记录除外     行以增量方式添加到$ HISTFILE中(一旦它们     输入),而不是等到shell退出。该     文件仍将定期重新编写,以便在修改时将其修剪     行数比$ SAVE指定的值增长20%     HIST(另请参阅HIST_SAVE_BY_COPY选项)。

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

答案 2 :(得分:0)

这有点旧,但是您始终可以向.zshrc中添加一个为您提供所有配置文件的功能。

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

因此,您要做的就是在您的shell中reload

答案 3 :(得分:0)

如果

source .zshrc

输出

<块引用>

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

你应该运行下面的命令

. ~/.zshrc