web-dev-qa-db-ja.com

.bash_historyからリロードするためのPrompt_command

私の.bashrcには次のものが含まれています。

HISTSIZE=30000
Prompt_COMMAND="history -a"
export HISTSIZE Prompt_COMMAND

私が気づいたこと:

  • .bash_historydoes追加されます。
  • 特定の端末セッションの履歴にはnotが含まれ、他の端末セッションから追加されたエントリが含まれます

望ましい動作は、任意の端末で任意のコマンドの後に.bash_historyを再ロードすることです。これを達成する方法は何ですか?おそらくそれはPrompt_COMMANDへの変更でしょう?

10
javadba

history -aコマンドは、履歴ファイルにのみ追加されます。シェルセッションからも読み取らない限り、これはシェルセッションには影響しません。だから、あなたが探しているのは:

Prompt_COMMAND="history -a; history -r"

help historyで説明されているように:

  -r    read the history file and append the contents to the history
        list

この方法では、まず現在のシェルの履歴を$HISTFILEに追加してから読み取り、他のシェルインスタンスから追加された履歴を現在のシェルにインポートします。

ある端末でコマンドを実行した場合、2番目の端末でコマンドを実行するまで、別の端末の履歴には表示されないことに注意してください。 $Prompt_COMMANDはプロンプトが表示される前に実行されるため、2番目の端末が開いてそこに座っているだけの場合、2番目の端末で何かを実行して新しいプロンプトを実行するまで、最初の端末で実行された新しいコマンドは読み取られません。示されています。

15
terdon