Quelle est la différence entre PS1 et PROMPT_COMMAND

En examinant ce sujet génial, j’ai remarqué que certains exemples utilisaient

PS1="Blah Blah Blah" 

et une certaine utilisation

 PROMPT_COMMAND="Blah Blah Blah" 

(et certains utilisent les deux) lors de la définition de l’invite dans un shell bash. Quelle est la différence entre les deux? Une recherche SO et même un peu plus de recherches sur Google ne donnent pas de résultats, alors même un lien vers le bon endroit pour chercher la réponse serait apprécié. Merci!

    De la page de documentation GNU Bash: http://www.gnu.org/software/bash/manual/bashref.html

     PROMPT_COMMAND If set, the value is interpreted as a command to execute before the printing of each primary prompt ($PS1). 

    Je ne l’ai jamais utilisé, mais j’aurais pu l’utiliser quand je n’avais que sh.

    PROMPT_COMMAND peut contenir des instructions bash ordinaires, tandis que la variable PS1 peut également contenir les caractères spéciaux, tels que “\ h” pour le nom d’hôte, dans la variable.

    Par exemple, voici l’invite bash qui utilise à la fois PROMPT_COMMAND et PS1. Le code bash dans PROMPT_COMMAND détermine la twig de git dans laquelle vous vous trouvez et l’affiche à l’invite, ainsi que le statut de sortie du dernier processus d’exécution, le nom d’hôte et le nom de base du fichier pwd. La variable RET enregistre la valeur de retour du dernier programme exécuté. C’est pratique pour voir s’il y avait une erreur et le code d’erreur du dernier programme que j’ai exécuté dans le terminal. Notez l’extérieur qui entoure toute l’expression PROMPT_COMMAND. Il inclut PS1 afin que cette variable soit réévaluée chaque fois que la variable PROMPT_COMMAND est évaluée.

     PROMPT_COMMAND='RET=$?;\ BRANCH="";\ ERRMSG="";\ if [[ $RET != 0 ]]; then\ ERRMSG=" $RET";\ fi;\ if git branch &>/dev/null; then\ BRANCH=$(git branch 2>/dev/null | grep \* | cut -d " " -f 2);\ fi; PS1="$GREEN\u@\h $BLUE\W $CYAN$BRANCH$RED$ERRMSG \$ $LIGHT_GRAY";' 

    Exemple de sortie ressemble à ceci dans un répertoire non-git:

     sashan@dhcp-au-122 Documents $ false sashan@dhcp-au-122 Documents 1 $ 

    et dans un répertoire git, vous voyez le nom de la twig:

     sashan@dhcp-au-122 rework mybranch $