La differenza è che PS1 è la stringa di prompt effettiva utilizzata e PROMPT_COMMAND è un comando che viene eseguito immediatamente prima del prompt. Se si desidera che il modo più semplice più flessibile della costruzione di un prompt, provate questo:
mettere questo nel tuo .bashrc:
function prompt_command {
export PS1=$(~/bin/bash_prompt)
}
export PROMPT_COMMAND=prompt_command
quindi scrivere uno script (bash, perl, ruby: la vostra scelta), e posizionarlo in ~/bin/bash_prompt.
Lo script può utilizzare qualsiasi informazione a cui piaccia costruire un prompt. Questo è IMO molto più semplice perché non devi imparare il linguaggio di sostituzione un po 'barocco che è stato sviluppato solo per la variabile PS1.
Si potrebbe pensare che si potrebbe fare lo stesso semplicemente impostando PROMPT_COMMAND direttamente su ~/bin/bash_prompt e impostando PS1 sulla stringa vuota. Questo a prima vista sembra funzionare, ma presto si scopre che il codice readline si aspetta che PS1 sia impostato sul prompt effettivo, e quando si fa scorrere il backword nella cronologia, le cose si incasinano di conseguenza. Questa soluzione alternativa fa sì che PS1 rifletta sempre il prompt più recente (poiché la funzione imposta il PS1 effettivo utilizzato dall'istanza di richiamo della shell) e ciò rende la cronologia di readline e dei comandi funzionante.
È possibile abbreviare una delle righe: 'se git branch &>/dev/null; quindi \ '. Reindirizza sia stdout che stderr in/dev/null. http://www.tldp.org/LDP/abs/html/io-redirection.html –
Non è necessario * esportare * 'PROMPT_COMMAND'. – dolmen
Penso che il commento di ceving sia molto vero anche per questa risposta: 'Non impostare PS1 in PROMPT_COMMAND! Imposta le variabili in PROMPT_COMMAND e usale in PS1' – Blauhirn