Aqui vou apontar um problema com
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
e
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Se você executar o source ~ / .bashrc, o $ PROMPT_COMMAND será como
"history -a; history -c; history -r history -a; history -c; history -r"
e
"history -a; history -n history -a; history -n"
Essa repetição ocorre toda vez que você executa 'source ~ / .bashrc'. Você pode verificar PROMPT_COMMAND depois de executar 'source ~ / .bashrc' executando 'echo $ PROMPT_COMMAND'.
Você pode ver que alguns comandos aparentemente estão quebrados: "history -n history -a". Mas a boa notícia é que ele ainda funciona, porque outras partes ainda formam uma sequência de comando válida (Apenas envolvendo algum custo extra devido à execução de alguns comandos repetidamente. E não tão limpo.)
Pessoalmente, uso a seguinte versão simples:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
que possui a maioria das funcionalidades sem nenhum problema, como mencionado acima.
Outro ponto a ser feito é: não há magia mágica .
PROMPT_COMMAND é apenas uma variável de ambiente simples. Os comandos nele são executados antes de você receber o prompt do bash (o sinal $). Por exemplo, o seu PROMPT_COMMAND é "echo 123" e você executa "ls" no seu terminal. O efeito é como executar "ls; echo 123".
$ PROMPT_COMMAND="echo 123"
saída (como a execução de 'PROMPT_COMMAND="echo 123"; $ PROMPT_COMMAND'):
123
Execute o seguinte:
$ echo 3
saída:
3
123
"history -a" é usado para escrever os comandos do histórico na memória para ~ / .bash_history
"history -c" é usado para limpar os comandos do histórico na memória
"history -r" é usado para ler os comandos de histórico de ~ / .bash_history para a memória
Veja a explicação do comando de histórico aqui: link
PS: Como outros usuários apontaram, export é desnecessário. Veja: usando exportação em .bashrc