zsh 在哪里存储我的历史记录?

zsh 在哪里存储我的历史记录?

我打开了两个终端,都运行 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_HISTORYSHARE_HISTORY需要fc -R在所有这些 shell 中执行操作,或者关闭所有 shell,检查是否没有将错误的行写回历史文件等。

相关内容