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