「history -D」コマンドが表示されますが、.zsh_historyの期間列が通常ゼロであるのはなぜですか?

「history -D」コマンドが表示されますが、.zsh_historyの期間列が通常ゼロであるのはなぜですか?

「history -D」コマンドが表示されますが、.zsh_historyの期間列が通常ゼロであるのはなぜですか?

テスト後この回答到着.zsh_historyの数値タイムスタンプの後に「0」がある列の目的は何ですか?コマンドはコマンドが実行された期間を示しますが、history -D期間列は~/.zsh_historyまだ表示されます0

その理由は何ですか?

~/.zsh_historyファイルは初期コマンドで更新されますが、それ以降は更新されないのですか、それとも別の場所history -D(メモリや他のファイルなど)から時間を取得するのですか?

答え1

前の質問に従って設定を見てみると、同じ問題が発生しました。以前の質問に答えると、私はデフォルト設定zshでシェルセッションを使用しています。有効にすると、EXTENDED_HISTORYシェルセッションが終了した後に正しく書き込み期間が表示されます(デフォルトでは、$HISTFILEメモリ内の履歴は文書に書き込まれます)。しかし、私の$HISTFILEファイルではEXTENDED_HISTORY

zsh-usersメーリングリストを照会したSHARE_HISTORY結果、シェルオプション(複数の同時シェルセッション間で同じコマンド履歴を共有するため)も使用していたため、期間が履歴ファイルに記録されていないことがわかりました。これSHARE_HISTORYは歴史的な出来事が記録されるからです。実装するinではなくコマンド終了コマンドまたはシェルセッションの時間(期間が利用可能な場合)。この動作はアクティブ化に似ていますINC_APPEND_HISTORYが、他のセッションの新しいコマンドも現在のシェルの履歴として読み込まれます。

しかし、別のシェルオプションがありますINC_APPEND_HISTORY_TIME(最後のオプションに注意してください_TIME)。互換性がないSHARE_HISTORYとを使用すると、INC_APPEND_HISTORYコマンドが期待どおりに終了した後にファイルに履歴イベントが追加されます。

このマニュアルにはzshoptions(1)次のように記載されています。

INC_APPEND_HISTORY_TIME
INC_APPEND_HISTORYこのオプションは、可能であればコマンドが完了した後に履歴エントリをファイルに書き込むことによって、コマンドに費やされた時間が履歴ファイルに正しくフォーマットされるようEXTENDED_HISTORY にするバリエーションです。これは、同じ履歴ファイルを使用するシェルの他のインスタンスで履歴エントリをすぐに使用できないことを意味します。

INC_APPEND_HISTORYこのオプションは SHARE_HISTORYおよびがオフの場合にのみ便利です。これら3つのオプションは相互に排他的であると見なされるべきです。

INC_APPEND_HISTORY_TIME複数の同時シェルセッション間で履歴を使用して共有を続けることができる場合、SHARE_HISTORYこのオプションのドキュメントでは、fc -RI必要に応じて他のシェルからイベントを読み取るためにシェルでそれらを使用することをお勧めします。

コマンドをインポートするときにさらに制御が必要であると判断した場合は、そのコマンドをオフまたはオンにしてからSHARE_HISTORYINC_APPEND_HISTORY上記INC_APPEND_HISTORY_TIME参照)を使用できますfc -RI

出力とコンテンツhistory -Dの違いは、$HISTFILE前者は記憶の中の歴史的出来事を示していますが、後者は歴史ファイルに記録された歴史的出来事を含んでいるという事実によるものです。履歴ファイルに書き込まれる内容(および時期)は、さまざまなシェルオプションによって異なります。

関連情報