2011-03-21 13 views
67

Soy nuevo en Git y estoy tratando de añadir la rama git actual para mi pronta ya existente, que se define de la siguiente manera:¿Por qué no se actualiza mi bash prompt?

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}\[email protected]\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} " 

lo intenté (a través del outsourcing mi archivo .bashrc de nuevo) y parecía funcionar, pero luego fui a otra sucursal y no se actualizó. ¿Cómo puedo asegurarme de que el $(__git_ps1) no esté en la memoria caché?

+12

Me encanta la idea de tener ':)' y ': (' en su prompt dependiendo de si el último comando falló :) –

+0

@Mark Longair: Lo encontré aquí: http://serverfault.com/questions/ 4889/what-are-some-informative-and-useful-shell-prompts-bash-csh-ksh-etc BTW, ¿por qué eliminaste tu solución, también funciona? – greg0ire

+0

fue minutos más tarde que los otros dos, y es menos limpio que @ geekosaur de todos modos –

Respuesta

103

Necesita una barra invertida en el $ para que no se expanda inmediatamente. (Comparar con la `...`, que es una forma diferente de escribir $(...).)

export PS1="${RESET}${YELLOW}\[email protected]\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} " 

Estoy de acuerdo con @MikeSep sobre el uso de comillas simples, pero en realidad es un poco más óptimo para que los colores y como ser sustituido inmediatamente . No es necesario, solo algo mejor. Dicho esto, es es más fácil de entender lo que está sucediendo si utiliza las comillas simples.

+1

Además, si alguna vez trabaja en cosas que no sean programas de terminal directamente (búferes de comandos de Emacs/Vim, 'pantalla', etc.), es posible que desee examinar el uso de' tput' en lugar de escapes de color codificados. – geekosaur

+1

Es necesario que las variables de color se sustituyan en este caso, creo que, al menos, obtengo los códigos de escape con la sugerencia de @ MikeSep, mientras que uno funciona bien. (+1) –

+0

@Mark: Eso es interesante; el '$ {SELECT}' muestra que se está realizando una evaluación recursiva. Tal vez solo sea por comandos? Por lo general, utilizo una función de PS1 porque es más fácil averiguar qué está pasando. – geekosaur

17

Su cadena PS1 probablemente se esté evaluando antes de que se guarde, pero realmente desea que el comando __git_ps1 se ejecute cada vez que obtenga un símbolo del sistema. Recomiendo el uso de comillas simples en lugar de comillas dobles para su línea export PS1='${RESET}...'.

+0

puede funcionar, pero estoy teniendo problemas para convertir todo el sistema a comillas simples, así que usaré la solución de geekosaur. Pero también obtienes mi voto popular. – greg0ire

+0

Ah, sí. El suyo es mejor. Extrañé a los vars locales por los colores. Gracias por el voto de todos modos. :) – MikeSep

Cuestiones relacionadas