追踪 Zsh 历史数据丢失的幕后真相

Tracking down a Zsh history data loss bug

多年来,我常发现 Zsh 历史文件中莫名丢失了确信执行过的命令。起初我以为是备份问题,但深入调查后发现是 Zsh 自身的 bug。通过 inotify、fatrace 和 bpftrace 等工具追踪文件操作,我最终定位到问题根源:Zsh 在特定条件下读取历史文件时未读至末尾,导致数据截断。为了复现并确认问题,我甚至修改了 Zsh 源码使其在写入不完整历史时主动崩溃,并分析核心转储文件。最终,Zsh 5.9.2 版本修复了该问题。

最终,通过修改 Zsh 源码使其在写入不完整历史时主动崩溃,并分析崩溃产生的核心转储文件,成为了定位问题的制胜策略!

同日更多故事

2026-08-15