Подтвердить что ты не робот

Почему мое обновление bash не обновляется?

Я новичок в 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}\[email protected]\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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