我打开了两个终端,都运行 zsh。我当前设置的历史记录选项如下:
export HISTFILE=~/.histfile
export HISTSIZE=10000
export SAVEHIST=10000
setopt HIST_IGNORE_ALL_DUPS
setopt HIST_EXPIRE_DUPS_FIRST
setopt HIST_SAVE_NO_DUPS
setopt APPEND_HISTORY
setopt EXTENDED_HISTORY
当我在任一终端中键入history
、 或 时fc -l
,我会看到最后 16 个命令(已编号)。这些历史在两个外壳中都是不同的,并且都与我在里面看到的不同.histfile
。
据我从man zshoptions
页面中可以看出,这是可以预料的,退出 shell 后,其命令将被附加到历史记录中。
在这种情况下,到那时为止每个终端的个人历史记录存储在哪里?
答案1
如果设置该INC_APPEND_HISTORY
选项,则会导致更立即地写入历史记录条目。另请注意SHARE_HISTORY
,如果设置了该值,可能会导致新的 shell 拾取听起来您想要从历史记录中删除的内容。实时重写历史记录取决于这些选项,就好像您不关心 shell 的特定实例中的其他命令一样,并且INC_APPEND_HISTORY
未设置,只需使用以下命令破坏该 shell 的历史记录fc -R
:
% echo super secret password
super secret password
% echo whoopsie
whoopsie
% history -2
18030 echo super secret password
18031 echo whoopsie
% fc -R $HISTFILE
% history -3
36060 vim ~/.zshrc
36061 man readpassphrase
36062 mutt
%
然后确认$EDITOR $HISTFILE
超级秘密密码不在历史文件中(另外!请注意,可能有一个zshaddhistory
函数(或函数数组),在这种情况下,您需要检查该函数(或那些函数)的内容确实做))。使用 时INC_APPEND_HISTORY
,该条目可能位于 中$HISTFILE
,因此编辑历史文件以删除错误条目,然后fc -R $HISTFILE
应从历史文件和 shell 中清除它。如果您怀疑新的 shell 已拾取该错误的历史记录条目,INC_APPEND_HISTORY
则SHARE_HISTORY
需要fc -R
在所有这些 shell 中执行操作,或者关闭所有 shell,检查是否没有将错误的行写回历史文件等。