头版Folia Daily Briefing
← 返回头版
科技互联网

Zsh历史文件截断bug最终被追踪定位并修复

Zsh shell在5.9.1版本中存在一个导致历史文件数据丢失的bug,已在5.9.2版本中得到修复[1]。这一问题的根源在于shell退出时的信号处理机制。

当readhistfile函数在读取历史文件过程中被信号中断,并设置了errflag & ERRFLAG_INT标志后会中止循环[1]。此时如果shell继续执行savehistfile函数,后者会直接将不完整的历史内容写入文件,从而覆盖原有的完整历史记录[1]。用户重复按压Ctrl+D、Ctrl+C等快捷键的退出习惯可能在savehistfile执行时发送SIGINT信号,触发这一bug[1]。

问题的修复补丁由Bart Schaefer在2025年4月提供,但在5.9.1发布时遗漏了该补丁的集成[1]。该bug的定位过程运用了inotify、fatrace、bpftrace等系统追踪工具来监控文件操作,同时利用coredumpctl收集崩溃core dump进行假设验证[1]。5.9.2版本已于2026年7月12日正式发布[1]。


Zsh shell历史文件截断bug信号中断系统追踪调试开源软件修复