我如何告诉ZSH重新加载自己,好像它是一个刚刚调用的shell,但不会丢失历史记录?
这方面的背景是我花了很长时间构建我的ZSH设置,如果我当前的机器出现故障,或者驱动器损坏等,我不想失去它。为此,我已将所有本地ZSH配置文件放在git存储库中。到目前为止还没有什么新东西。
但现在我想添加一个'安装'脚本到存储库,以简化在新机器上安装我的设置的过程。一旦安装了文件(实际上,在$ {ZDOTDIR-〜}中创建的符号链接指向存储库中的文件),我希望脚本重新加载它们,而不通过exec替换当前进程(因此丢失历史记录),并且没有一个一个地获取文件(冒着我可能以错误的顺序加载它们或者错过ZSH启动过程的其他部分的风险)。
是否有一些内置于ZSH的工具,或者其他一些方法告诉它重新加载所有内容,就好像它是一个刚刚启动的实例,同时保留了命令历史记录?
编辑:哈。嗯...当然,我现在已经把我的.zshrc和.zlogin消灭了,虽然后者没有太大的困难(它只有RVM的设置,很容易恢复)。然而,前者伤害。任何能告诉我如何从发现它的shell恢复 .zshrc的人都获得了我所有的超级奖励积分。当然,原始问题的答案仍将被标记为已被接受。我遇到了问题。我写了一个shell脚本。 Now I have two problems :)
答案 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