Ici, je vais signaler un problème avec
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
et
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Si vous utilisez la source ~ / .bashrc, le $ PROMPT_COMMAND sera comme
"history -a; history -c; history -r history -a; history -c; history -r"
et
"history -a; history -n history -a; history -n"
Cette répétition se produit chaque fois que vous exécutez 'source ~ / .bashrc'. Vous pouvez vérifier PROMPT_COMMAND après chaque fois que vous exécutez 'source ~ / .bashrc' en exécutant 'echo $ PROMPT_COMMAND'.
Vous pouvez voir que certaines commandes sont apparemment brisées: "history -n history -a". Mais la bonne nouvelle est que cela fonctionne toujours, car d'autres pièces forment toujours une séquence de commandes valide (entraînant simplement des coûts supplémentaires en raison de l'exécution répétitive de commandes. Et pas si propre.)
Personnellement j'utilise la version simple suivante:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
qui a la plupart des fonctionnalités alors aucun problème tel que mentionné ci-dessus.
Un autre point à souligner est qu’il n’ya vraiment rien de magique . PROMPT_COMMAND n'est qu'une simple variable d'environnement bash. Les commandes qu'il contient sont exécutées avant que vous obteniez prompt bash (le signe $). Par exemple, votre PROMPT_COMMAND est "echo 123" et vous exécutez "ls" dans votre terminal. L'effet est similaire à l'exécution de "ls; echo 123".
$ PROMPT_COMMAND="echo 123"
output (comme si vous exécutiez 'PROMPT_COMMAND = "echo 123"; $ PROMPT_COMMAND'):
123
Exécutez ce qui suit:
$ echo 3
sortie:
3
123
"history -a" est utilisé pour écrire les commandes d'historique en mémoire dans ~ / .bash_history
"history -c" est utilisé pour effacer les commandes d'historique en mémoire
"history -r" est utilisé pour lire les commandes d'historique de ~ / .bash_history dans la mémoire
Voir l'explication des commandes d'historique ici: http://ss64.com/bash/history.html
PS: Comme d'autres utilisateurs l'ont souligné, l' exportation n'est pas nécessaire. Voir: utilisation de l'export dans .bashrc