Qui sottolineo un problema con
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
e
PROMPT_COMMAND="$PROMPT_COMMAND;history -a; history -n"
Se esegui source ~ / .bashrc, $ PROMPT_COMMAND sarà simile
"history -a; history -c; history -r history -a; history -c; history -r"
e
"history -a; history -n history -a; history -n"
Questa ripetizione si verifica ogni volta che si esegue 'source ~ / .bashrc'. Puoi controllare PROMPT_COMMAND dopo ogni esecuzione di 'source ~ / .bashrc' eseguendo 'echo $ PROMPT_COMMAND'.
Potresti vedere alcuni comandi apparentemente non funzionanti: "history -n history -a". Ma la buona notizia è che funziona ancora, perché altre parti formano ancora una sequenza di comandi valida (comporta solo un costo aggiuntivo dovuto all'esecuzione ripetitiva di alcuni comandi. E non così pulito.)
Personalmente utilizzo la seguente versione semplice:
shopt -s histappend
PROMPT_COMMAND="history -a; history -c; history -r"
che ha la maggior parte delle funzionalità mentre non esiste un problema di questo tipo.
Un altro punto da sottolineare è: non c'è davvero nulla di magico . PROMPT_COMMAND è solo una semplice variabile d'ambiente bash. I comandi in esso vengono eseguiti prima di ottenere il prompt bash (il segno $). Ad esempio, PROMPT_COMMAND è "echo 123" e si esegue "ls" nel terminale. L'effetto è come eseguire "ls; echo 123".
$ PROMPT_COMMAND="echo 123"
output (proprio come eseguendo 'PROMPT_COMMAND = "echo 123"; $ PROMPT_COMMAND'):
123
Eseguire quanto segue:
$ echo 3
produzione:
3
123
"history -a" è usato per scrivere i comandi di cronologia in memoria su ~ / .bash_history
"history -c" è usato per cancellare i comandi di cronologia in memoria
"history -r" è usato per leggere i comandi di cronologia da ~ / .bash_history alla memoria
Vedi la spiegazione dei comandi della cronologia qui: http://ss64.com/bash/history.html
PS: Come altri utenti hanno sottolineato, l' esportazione non è necessaria. Vedi: usando export in .bashrc