79 votes

Pourquoi mon invite bash ne se met pas à jour ?

Je suis nouveau dans git et j'essaie d'ajouter la branche git actuelle à mon prompt déjà existant, qui est défini 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} "

J'ai essayé (en me procurant mon .bashrc ) et cela semblait fonctionner, mais ensuite je suis allé sur une autre branche et cela n'a pas mis à jour. Comment puis-je m'assurer que le $(__git_ps1) n'est pas mis en cache ?

125voto

geekosaur Points 26170

Vous avez besoin d'une barre oblique inversée sur le $ pour qu'il ne soit pas étendu immédiatement. (Comparez avec le `...` ce qui est une autre façon d'écrire $(...) .)

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

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

21voto

MikeSep Points 3013

Votre PS1 est probablement évaluée avant d'être sauvegardée, mais vous voulez vraiment que l'option __git_ps1 à 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 commande export PS1='${RESET}...' ligne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X