如何在不替换当前 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
如何告诉 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