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でシェルオプションを設定しないと、保存されたzsh履歴イベントは$HISTFILEタイムスタンプなしで保存されます。

を使用すると、history -E 1記録イベントはメモリ記録の最初から最後までタイムスタンプ(特定の方法でフォーマット)で印刷されます。

読み取った履歴エントリにはタイムスタンプがないため、$HISTFILEコマンドが実行された時刻に対応するタイムスタンプが割り当てられます。history

各履歴イベントのタイムスタンプを保存するには、EXTENDED_HISTORYシェルオプションを有効にします。将来のすべての対話式zshシェルセッションに対してこれを行うには、$ZDOTDIR/.zshrcファイルを変更して追加します。

setopt EXTENDED_HISTORY

関連情報