Aquí señalaré un problema con
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
y
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Si ejecuta source ~ / .bashrc, $ PROMPT_COMMAND será como
"history -a; history -c; history -r history -a; history -c; history -r"
y
"history -a; history -n history -a; history -n"
Esta repetición ocurre cada vez que ejecuta 'source ~ / .bashrc'. Puede verificar PROMPT_COMMAND después de cada vez que ejecute 'source ~ / .bashrc' ejecutando 'echo $ PROMPT_COMMAND'.
Podría ver que algunos comandos aparentemente están rotos: "history -n history -a". Pero la buena noticia es que todavía funciona, porque otras partes todavía forman una secuencia de comandos válida (solo implica un costo adicional debido a la ejecución de algunos comandos de forma repetitiva. Y no tan limpio).
Personalmente uso la siguiente versión simple:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
que tiene la mayoría de las funcionalidades, mientras que no existe el problema mencionado anteriormente.
Otro punto a destacar es: realmente no hay nada mágico . PROMPT_COMMAND es solo una variable de entorno de bash simple. Los comandos en él se ejecutan antes de obtener bash prompt (el signo $). Por ejemplo, su PROMPT_COMMAND es "echo 123" y ejecuta "ls" en su terminal. El efecto es como ejecutar "ls; echo 123".
$ PROMPT_COMMAND="echo 123"
salida (como ejecutar 'PROMPT_COMMAND = "echo 123"; $ PROMPT_COMMAND'):
123
Ejecute lo siguiente:
$ echo 3
salida:
3
123
"history -a" se usa para escribir los comandos de historial en memoria en ~ / .bash_history
"history -c" se usa para borrar los comandos de historial en la memoria
"history -r" se usa para leer comandos de historial desde ~ / .bash_history a la memoria
Consulte la explicación del comando de historial aquí: http://ss64.com/bash/history.html
PD: Como han señalado otros usuarios, la exportación es innecesaria. Ver: uso de exportar en .bashrc