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 sempre que você executa 'source ~ / .bashrc'. Você pode verificar PROMPT_COMMAND após cada vez que executar 'source ~ / .bashrc' executando 'echo $ PROMPT_COMMAND'.
Você pode ver alguns comandos aparentemente quebrados: "history -n history -a". Mas a boa notícia é que ele ainda funciona, porque outras partes ainda formam uma sequência de comandos válida (apenas envolve 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, embora não exista esse problema como mencionado acima.
Outro ponto a destacar é: não há realmente nada de mágico . PROMPT_COMMAND é apenas uma variável de ambiente simples do bash. Os comandos nele são executados antes de você receber o prompt do bash (o sinal $). Por exemplo, seu PROMPT_COMMAND é "eco 123" e você executa "ls" no seu terminal. O efeito é como executar "ls; eco 123".
$ PROMPT_COMMAND="echo 123"
output (Assim como executar 'PROMPT_COMMAND = "eco 123"; $ PROMPT_COMMAND'):
123
Execute o seguinte:
$ echo 3
resultado:
3
123
"history -a" é usado para escrever os comandos history na memória para ~ / .bash_history
"history -c" é usado para limpar os comandos de histórico na memória
"history -r" é usado para ler comandos de histórico de ~ / .bash_history na memória
Veja a explicação do comando history aqui: http://ss64.com/bash/history.html
PS: Como outros usuários apontaram, a exportação é desnecessária. Consulte: usando exportação em .bashrc