ここで私は1つの問題を指摘します
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
そして
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
source〜/ .bashrcを実行すると、$ PROMPT_COMMANDは次のようになります
"history -a; history -c; history -r history -a; history -c; history -r"
そして
"history -a; history -n history -a; history -n"
この繰り返しは、「source〜/ .bashrc」を実行するたびに発生します。「echo $ PROMPT_COMMAND」を実行して、「source〜/ .bashrc」を実行するたびにPROMPT_COMMANDを確認できます。
「history -n history -a」というコマンドが破損しているように見えることがあります。しかし、良いニュースは、他の部分がまだ有効なコマンドシーケンスを形成しているため、まだ機能することです(一部のコマンドを繰り返し実行するため、多少のコストがかかります。それほどきれいではありません)。
個人的には、次の簡単なバージョンを使用します。
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
上記のような問題はありませんが、ほとんどの機能を備えています。
もう1つのポイントは、魔法は何もないということです。PROMPT_COMMANDは単なるbash環境変数です。その中のコマンドは、bashプロンプト($記号)を取得する前に実行されます。たとえば、PROMPT_COMMANDは「echo 123」で、ターミナルで「ls」を実行します。効果は、「ls; echo 123」を実行するようなものです。
$ PROMPT_COMMAND="echo 123"
出力( 'PROMPT_COMMAND = "echo 123"; $ PROMPT_COMMAND'を実行するように):
123
以下を実行します。
$ echo 3
出力:
3
123
「history -a」は、メモリ内の履歴コマンドを〜/ .bash_historyに書き込むために使用されます
「history -c」は、メモリ内の履歴コマンドをクリアするために使用されます
「history -r」は、〜/ .bash_historyからメモリへの履歴コマンドの読み取りに使用されます
ここで履歴コマンドの説明を参照してください:http : //ss64.com/bash/history.html
PS:他のユーザーが指摘したように、エクスポートは不要です。参照:.bashrcでのエクスポートの使用