I often open lots and lots of terminals (right now, I have seven open on this workspace) and I often search history
with grep
to find a command I've just written recently, but I don't want to hunt down the terminal and then scroll up and hunt for it.
時々、ターミナルが なしで閉じてしまいexit
、そこに書き込んだ内容がすべて失われます。また、強制終了されたターミナルで書き込んだ内容が必要になることもあります。
各端末がすぐに書き込むようにする方法はありますか.bash_history
? または、少なくとも 1 分に 1 回などでしょうか?
答え1
簡単な解決策は、Bash 履歴をリアルタイムで更新。
これらのコマンドを .bashrc 構成に配置するように指示されています:
shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
最初のコマンドは履歴ファイルのモードを追加に変更し、2 番目のコマンドはhistory -a
各シェル プロンプトで実行されるコマンドを設定します。この-a
オプションにより、history
現在の行または新しい行がすぐに履歴ファイルに書き込まれます。
からman bash
:
histappend シェル オプションが有効になっている場合 (以下の「シェル組み込みコマンド」の shopt の説明を参照)、行は履歴ファイルに追加され、そうでない場合は履歴ファイルが上書きされます。
Zsh関連:
答え2
これを次のように入力してみてください.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 つのターミナル、 write echo 1
、2 つ目のターミナルecho 2
、最初に がありecho 3
、下矢印を 2 回押すと、 がecho 2
使用可能になるはずです)。書き込まれた内容にアクセスするには、特定のターミナルでコマンドを発行する必要があります。
答え3
約 100000 エントリの大きな履歴ファイルがあり、履歴リストをクリアして履歴ファイル全体を読み取るバリアント (およびを使用history -c
)history -r
では、プロンプトが表示される前に顕著な (おそらく 0.2 秒) 遅延が発生します。 を使用すると、history -n
履歴ファイルから新しい行のみが読み取られるため、より高速になります。
shopt -s histappend
PROMPT_COMMAND='history -a;history -n'
PROMPT_COMMAND
シェル変数なのでエクスポートする必要はありません。
答え4
他のすべての回答に対する注意(基本的に同じことです):
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"
(または友達)で設定すれば.bashrc
十分です。
history -a
また、現在のセッションの履歴を「スナップショット」したいときはいつでも手動で実行できます。
このコマンドは、常にファイルに新しい行を追加し、上書きすることはないshopt -s histappend
ため、必要ありません。また、少なくとも Bash 4 以降では、これがデフォルトの動作です。history -a
histappend