Почему мой bash не запрашивает обновление?


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

RESET="[7]"
NORMAL="[3[0m]"
RED="[3[31;1m]"
YELLOW="[3[33;1m]"
WHITE="[3[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 file again) и это, казалось, работало, но затем я перешел на другую ветку, и она не обновлялась. Как я могу убедиться, что $(__git_ps1) не кэшируется?

2 75

2 ответа:

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

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

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

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