为什么 .zsh_history 中的持续时间列通常为 0,尽管“history -D”命令显示它?
在测试了这个答案后,What is the Purpose of the column with the '0' after the numeric timestamp in .zsh_history? 我注意到,虽然该history -D
命令显示了该命令的运行时间,但持续时间列~/.zsh_history
仍然显示0
。
这是什么原因呢?
是因为~/.zsh_history
文件在初始命令时更新,但之后没有更新,还是history -D
从单独的位置(可能是从内存或另一个文件)获取时间?
当我查看自己的设置时,在回答您之前的问题后,我也遇到了同样的问题。在回答您之前的问题时,我使用的是
zsh
具有默认设置的 shell 会话,并且在启用EXTENDED_HISTORY
. 我可以看到 shell 会话终止后正确写入的持续时间(默认情况下,内存中的历史记录将写入文件$HISTFILE
)。然而,在我自己的$HISTFILE
文件中,我注意到持续时间全部为零,即使我使用了EXTENDED_HISTORY
.查询
zsh-users
邮件列表后发现,由于我还使用了SHARE_HISTORY
shell 选项(在多个并发 shell 会话之间共享相同的命令历史记录),因此持续时间不会写入历史文件中。这是因为,当持续时间可用时,该选项会导致在执行命令时SHARE_HISTORY
写入历史事件,而不是在命令或 shell 会话终止时写入。此行为类似于启用,但也会从其他会话将新命令读取到当前 shell 的历史记录中。INC_APPEND_HISTORY
但是,还有另一个 shell 选项
INC_APPEND_HISTORY_TIME
(请注意尾随的_TIME
),它与和不兼容,它在命令终止后以我们期望的方式将历史事件附加到文件中。SHARE_HISTORY
INC_APPEND_HISTORY
手册
zshoptions(1)
是这样说的:如果您想使用
INC_APPEND_HISTORY_TIME
并且仍然能够在多个并发 shell 会话之间共享历史记录,该选项的文档建议在需要时在 shell 中SHARE_HISTORY
使用fc -RI
从其他 shell 读取事件:的输出
history -D
和内容之间的差异$HISTFILE
是由于前者显示内存中的历史事件,而后者包含写入历史文件的历史事件。写入历史文件的内容(以及何时)取决于各种 shell 选项,到目前为止(在上述说明之后),希望这些选项是显而易见的。