zsh 历史记录显示旧命令的当前时间

zsh 历史记录显示旧命令的当前时间

不知何故,我的 zsh 历史记录显示错误的时间戳,如下所示。

❯ history -E 1 | tail -20
 6047  31.12.2019 15:08  babel-node
 6048  31.12.2019 15:08  node -v
 6049  31.12.2019 15:08  git diff
 6050  31.12.2019 15:08  rm package-lock.json
 6051  31.12.2019 15:08  yarn update
 6052  31.12.2019 15:08  yarn
 6053  31.12.2019 15:08  rm yarn.lock
 6054  31.12.2019 15:08  yarn install
 6055  31.12.2019 15:08  yarn serve
 6056  31.12.2019 15:08  exit
 6058  31.12.2019 15:00  bin/rails s
 6059  31.12.2019 15:00  cd ../my_project
 6060  31.12.2019 15:00  bin/rails c
 6062  31.12.2019 15:03  man history
 6063  31.12.2019 15:03  vi ~/.bash_history
 6064  31.12.2019 15:03  vi ~/.zsh_history
 6065  31.12.2019 15:04  zsh -f
 6066  31.12.2019 15:06  fc -li 100
 6067  31.12.2019 15:08  history -E 1 | tail -100

15:08除最新命令外,所有带有时间戳的命令history都是在昨天之前执行的。每次history执行命令时,旧命令的时间戳都会刷新。

虽然我要清除历史数据,但我不想遇到同样的错误。有谁知道导致此错误的原因以及如何防止它?

我正在使用zsh 5.3 (x86_64-apple-darwin18.0)iTerm2

变量

这些是我的历史相关变量。

❯ env | grep HIST

❯ typeset | grep HIST
HISTCHARS='!^#'
integer 10 readonly HISTCMD=6119
HISTFILE=/Users/ironsand/.zsh_history
integer 10 HISTSIZE=10000
integer 10 SAVEHIST=10000

答案1

如果您没有EXTENDED_HISTORY在 中设置 shell 选项zsh,则保存的历史事件$HISTFILE将不带时间戳保存。

当您使用 时history -E 1,历史事件将从内存历史记录的开头到结尾打印,并带有时间戳(以特定方式格式化)。

读取的历史记录条目没有时间戳,因此会为它们分配与执行命令的$HISTFILE时间相对应的时间戳。history

要保存每个历史事件的时间戳,请启用EXTENDED_HISTORYshell 选项。要对所有未来的交互式zshshell 会话执行此操作,请修改您的$ZDOTDIR/.zshrc文件并添加

setopt EXTENDED_HISTORY

相关内容