Показывает ветку git в командной строке? - PullRequest
4 голосов
/ 03 сентября 2011

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

Я прочитал несколько уроков, постов в блоге и т. Д., И насколько я понимаю, я все делаю правильно, но этоне похоже на работу.

Я бы хотел, чтобы приглашение выглядело так:

dannys-macbook:hillcrest-store [master]$

, но в настоящее время оно выглядит так:

dannys-macbook:hillcrest-store danny$ 

Iдобавили следующее в ~ / .bash_profile:

PATH=$PATH:/usr/local/bin; export PATH

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR$
PS1="$PROMPT"
export PS1

Я не уверен, что делаю не так, может быть, мне следует каким-то образом «сбросить» приглашение?

Ответы [ 2 ]

12 голосов
/ 21 февраля 2012

Более простое решение: заключить GIT_STATUS в кавычки, чтобы оно не оценивалось при запуске bash, а вместо этого оценивалось, когда bash отображает приглашение:

COLOR1='\[\e[1;32m\]'
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS='$(__git_ps1 " %s")'
PROMPT_CHAR='\$'
PS1="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR}"

Также обратите внимание, что экспорт PS1 не очень хорошая идея.

1 голос
/ 04 сентября 2011

Вы хотите, чтобы PS1 обновлялся так, чтобы он содержал текущую ветвь каждый раз, когда отображается подсказка, то есть до того, как вы введете следующую команду.Попросите bash сделать это, снова установив PS1 в функции precmd.bash запускает эту функцию, прежде чем показывать вам приглашение:

precmd() {
    PS1=...
}
...