Почему мой bash не обновляет? - PullRequest
78 голосов
/ 21 марта 2011

Я новичок в git, и я пытаюсь добавить текущую ветку git в мое уже существующее приглашение, которое определяется следующим образом:

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} "

Я пробовал это (получая мой .bashrc файл снова), и это, казалось, работало, но затем я пошел в другую ветку, и это не обновлялось.Как я могу убедиться, что $(__git_ps1) не кэшируется?

Ответы [ 2 ]

122 голосов
/ 21 марта 2011

Вам нужна обратная косая черта на $, поэтому она не раскрывается сразу. (Сравните с `...`, который представляет собой другой способ записи $(...).)

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

Я бы согласился с @MikeSep об использовании одинарных кавычек, но на самом деле более оптимальным является немедленная замена цветов и тому подобного. Не обязательно, просто лучше. Тем не менее, легче понять, что происходит, если вы используете одинарные кавычки.

21 голосов
/ 21 марта 2011

Ваша строка PS1, вероятно, проверяется перед сохранением, но вы действительно хотите, чтобы команда __git_ps1 запускалась каждый раз, когда вы получаете командную строку. Я бы рекомендовал использовать одинарные кавычки вместо двойных для вашей строки export PS1='${RESET}...'.

...