Skip to content

zsh 历史记录损坏的修复 ​

zsh 启动时如果报 zsh: corrupt history file /home/user/.zsh_history,说明历史文件已经损坏,zsh 拒绝加载它。修复思路很简单:用 strings 把文件里的不可打印字符剥离,重建一份能正常解析的历史文件,全程不需要重启终端。

损坏的常见原因 ​

  • 历史文件中混入了不可打印字符,例如误把二进制内容粘贴进了终端
  • 多个 shell 会话同时写入同一个历史文件,写入过程互相干扰
  • 写入历史时进程被异常终止,留下不完整的记录

修复步骤 ​

bash
cd ~                                       # 进入 home 目录
mv .zsh_history .zsh_history_bad           # 把损坏的历史文件改名备份
strings .zsh_history_bad > .zsh_history    # 只保留可打印字符,重建历史文件
fc -R .zsh_history                         # 在当前会话重新加载历史

逐行说明:

  • mv 先把原文件改名,损坏的原始数据保留在 .zsh_history_bad 里,修复失败也不会丢数据
  • strings 只输出文件中的可打印文本,混入的二进制字符被剥离,zsh 即可正常解析重建后的文件
  • fc -R 把重建后的历史读回当前 shell;省略这一步则需要重开终端才能恢复

重建后如果发现个别命令丢了,可以从 .zsh_history_bad 里人工挑回——大部分行仍然是完好的,只是个别行夹带坏字符。确认无误后再删除备份。

要点 ​

  • 报错本质是历史文件里出现了 zsh 无法解析的内容,剥离不可打印字符即可恢复
  • 四步操作:改名备份、strings 重建、fc -R 重载,无需重启终端
  • 修复不改变写入行为;如果损坏反复出现,优先排查是否有多个会话在同时写同一个历史文件
最近更新

基于 VitePress 构建