Почему мое обновление 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)
не кэшируется?
Ответы
Ответ 1
Вам нужна обратная косая черта на $
, чтобы она не была немедленно расширена. (Сравните с `...`
, который является другим способом записи $(...)
.)
export PS1="${RESET}${YELLOW}\[email protected]\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "
Я бы согласился с @MikeSep об использовании одинарных кавычек, но на самом деле это немного более оптимально, чтобы позволить цвета и их заменять сразу. Не нужно, только несколько лучше. Тем не менее, легче понять, что происходит, если вы используете одиночные кавычки.
Ответ 2
Ваша строка PS1
, вероятно, будет оцениваться до ее сохранения, но вы действительно хотите, чтобы команда __git_ps1
запускалась каждый раз, когда вы получаете командную строку. Я бы рекомендовал использовать одинарные кавычки вместо двойных кавычек для вашей строки export PS1='${RESET}...'
.