多くの場合、多くのターミナルを開きます[現在、このワークスペースで7つ開いています]。最近history
でgrep
を検索して、最近書いたコマンドを見つけることがよくありますが、ターミナルを探してから、スクロールしてさらに探したいなど。ターミナルが「終了」せずに閉じてしまい、書いたものがすべて失われることがあります[ターミナルで書いたものが必要な場合があります殺された]。
各端末がすぐに.bash_historyに書き込むようにする方法はありますか?または少なくとも1分に1回、またはそのような何か?
リアルタイムでのBash履歴の更新 で説明されているシンプルなソリューション。
これらのコマンドを.bashrc構成に入れるように指示されています。
shopt -s histappend
Prompt_COMMAND="history -a;$Prompt_COMMAND"
最初のコマンドは、.history
ファイルモードを追加に変更します。 2番目のコマンドは、history -a
コマンドが各シェルプロンプトで実行されるように構成します。 -a
は、現在の行と新しい行をすぐに履歴ファイルに書き込みます。
Zshに関連:
これを.bashrc
に入れてみてください:
shopt -s histappend # append to history, don't overwrite it
export Prompt_COMMAND="history -a; history -c; history -r; $Prompt_COMMAND"
history -c
は、実行中のセッションの履歴をクリアします。これにより、$HISTSIZE
の量だけ履歴カウンターが減少します。 history -r
は$HISTFILE
の内容を読み取り、現在実行中のセッション履歴に挿入します。これにより、$HISTFILE
の行数だけ履歴カウンターが増加します。
私はそれがコマンドがほとんどすぐに利用できることを意味すると思います(あなたは1つの端末を持ち、echo 1
、2番目の端末echo 2
、最初のecho 3
を書き、矢印を2回押すとecho 2
available。記述された内容にアクセスするには、特定の端末でコマンドを発行する必要があります。
約100000エントリの大きな履歴ファイルがあり、履歴リストをクリアし、履歴ファイル全体を(history -c
およびhistory -r
を使用して)読み込むバリアントは、プロンプトが表示されます。履歴ファイルから新しい行のみが読み取られるようにhistory -n
を使用すると、より高速になります。
shopt -s histappend
Prompt_COMMAND='history -a;history -n'
Prompt_COMMAND
はシェル変数であるため、エクスポートする必要はありません。
他のすべての回答に関するメモ(基本的に同じものです):
Prompt_COMMAND="history -a;$Prompt_COMMAND"
(または友人)に.bashrc
を設定するだけで十分です。
また、現在のセッションの履歴を「スナップショット」したいときはいつでもhistory -a
を手動で実行できます。
shopt -s histappend
コマンドは、history -a
が常にファイルに新しい行を追加し、上書きしないため、必要ありません。また、少なくともBash 4では、histappend
がデフォルトの動作です。