フォローする回答:
同時に、複数のbashインスタンスを閉じると履歴が消去される可能性がある既知の競合状態があります。これは、bash履歴ファイルを作成するときにロックが使用されないために発生します。
bash履歴の削除を防ぐ方法は?
urxvt
私はi3wmを使用していますが、端末を手動で閉じる前にコンピュータをシャットダウンしたときにこれが主に起こると思います。 (キーバインディングによる)終了コマンドはですsystemctl poweroff
。
ベストアンサー1
競合状態の原因は、bashがシェルが終了したときにのみ履歴ファイルに書き込むことです。また、複数のシェルが実行されている場合は、既存の履歴ファイルを上書きし、最後に終了したシェルのみが履歴を支配します。
したがって、1つの解決策は、各コマンドの後にレコードを書き込むことです。これにより、矢印を上にして別のウィンドウで発生した履歴イベントを表示できるため、実行したコマンドが開いているすべてのシェルに露出するなど、悪影響を及ぼす可能性があります。これが起こる可能性が最も高いのは、「上矢印をN回押してEnterキーを押す」などの繰り返しコマンドセットを実行し続ける場合です。バックグラウンドプロセスが閉じたウィンドウで終わると、突然どのコマンドが実際に「N + 1の上向き矢印」であるかを注意深く見てください。これは間違ったコマンドを実行する危険性があります。
「コマンドごとの履歴」をオンにするには、これを.bashrcに追加します(保存する履歴行の数は単なる例であり、必要に応じて変更できます)。
HISTFILESIZE=400000000
HISTSIZE=10000
PROMPT_COMMAND="history -a"
export HISTSIZE PROMPT_COMMAND
shopt -s histappend