我刚刚意识到我已经使用多年的工作流程并没有完成它应该做的事情。由于这么长时间没有意识到,你可能会觉得不值得花太多精力,但事实证明,现在,它已经变得有些重要了。
我在说什么?好的,我tmux
运行了多个会话,每个会话都有不同的窗口等等。像这样工作真是太棒了。但它有一个缺点。当服务器重新启动时,无论出于何种原因,它都会关闭我的所有会话。公平地说,这是无法避免的,也不会经常发生。然而,令人烦恼的是,我所有的zsh
或bash
history
都消失了。这是个问题。我依赖我的历史,也许太多了。
我时不时地点击fc -W
(in )来规避这个问题。zsh
我认为这会附加内存中的历史记录,然后我只会丢失上次调用fc -W
和重新启动服务器之间的部分。但这不是它的作用。如果我fc -W
在一个窗口中使用,那么fc -W
在另一个窗口中,第一个窗口的历史记录将被第二个窗口的历史记录覆盖。我需要fc -R
先使用,但这会复制整个历史记录......基本上我一直在滥用该fc
命令。
tmux
问题是:当我在里面突然断电时,如何确保不丢失任何历史记录?笔记:
- 我使用无限的历史,以防万一。
- 丢失一些历史记录是可以的,即,如果我必须手动调用命令(或在 cronjob 中),并且我丢失了自该命令上次运行以来的部分历史记录,那也没关系。
- 退出终端并打开新终端并不是解决方案。
- 我不想将我的命令直接存储到历史记录中,因为这会混合不同的历史记录。
- 欢迎提供
bash
两者的解决方案。是优选的。zsh
zsh
编辑:突出显示每个人似乎都误解的部分。
答案1
在 zsh 中,使用fc -AI
来保存您的历史记录,而不是fc -W
.使用-A
,而不是-W
,否则其他 shell 实例的历史记录将被覆盖。并-I
仅保存自上次保存以来的新历史记录条目。
鉴于您的工作流程,您可能应该自动保存历史记录,而不是手动保存。打开该inc_append_history
选项以在执行每个命令之前立即将其保存到历史文件中。
虽然可以在 bash 中实现相同的效果,但在 bash 实例之间正确共享历史记录却更困难。看在多个终端窗口中保留 bash 历史记录
答案2
您可以bash
使用此命令保存您的历史记录(我不熟悉zsh
):
history -a
这似乎适用于zsh
:
fc -ln 1 -1 > ~/.zsh_history