web-dev-qa-db-fra.com

Pourquoi ma bash prompt ne se met-elle pas à jour?

Je suis nouveau sur git et j'essaie d'ajouter la branche git actuelle à mon invite déjà existante, qui est définie comme suit:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "

Je l'ai essayé (en me procurant à nouveau mon fichier .bashrc) Et cela semblait fonctionner, mais je suis ensuite passé sur une autre branche et il n'a pas été mis à jour. Comment puis-je m'assurer que la $(__git_ps1) n'est pas mise en cache?

78
greg0ire

Vous avez besoin d'une barre oblique inverse sur le $ Afin qu'elle ne soit pas développée immédiatement. (Comparez avec le `...`, Qui est une manière différente d'écrire $(...).)

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "

Je serais d'accord avec @MikeSep sur l'utilisation de guillemets simples, mais c'est en fait un peu plus optimal de laisser les couleurs et autres être substituées immédiatement. Pas nécessaire, juste un peu mieux. Cela dit, il est plus facile de comprendre ce qui se passe si vous utilisez les guillemets simples.

123
geekosaur

Votre PS1 la chaîne est probablement évaluée avant d'être enregistrée, mais vous voulez vraiment le __git_ps1 commande à exécuter chaque fois que vous obtenez une invite de commande. Je vous recommande d'utiliser des guillemets simples au lieu de guillemets doubles pour votre export PS1='${RESET}...' ligne.

21
Mike Seplowitz