Конфигурирование bash_profile для отображения git branch возвращает мою ветку дважды - PullRequest
1 голос
/ 21 октября 2011
# show git branch
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

function proml {
  local        BLUE="\[\033[0;34m\]"
  local         RED="\[\033[0;31m\]"
  local   LIGHT_RED="\[\033[1;31m\]"
  local       GREEN="\[\033[0;32m\]"
  local LIGHT_GREEN="\[\033[1;32m\]"
  local       WHITE="\[\033[1;37m\]"
  local  LIGHT_GRAY="\[\033[0;37m\]"
  case $TERM in
    xterm*)
    TITLEBAR='\[\033]0;\u@\h:\w\007\]'
    ;;
    *)
    TITLEBAR=""
    ;;
  esac

PS1="${TITLEBAR}\
$WHITE\w$GREEN\$(parse_git_branch)$BLUE\
$GREEN\$ "
PS2='> '
PS4='+ '
}
proml

Предыдущий код возвращает имя ветви три раза.Мне просто нужно увидеть его один раз ...

~/projects/sms(apps2)$ 
(apps2)
(apps2)

Как я могу исправить это, чтобы отобразить только путь + ветвь?

то есть .. ~/projects/sms(apps2)$

Ответы [ 2 ]

3 голосов
/ 22 октября 2011

Это последняя строка вашего скрипта, которая запутывает вещи. Вызов proml напрямую из ~/.bash_profile или ~/.bashrc устанавливает переменные окружения PS* только один раз, поэтому он не будет обновляться при смене папок (и в каждой папке, которую вы вводите позже, может отображаться (apps2)).

Вместо этого proml должно быть установлено как PROMPT_COMMAND в последней строке вашего скрипта:

PROMPT_COMMAND=proml

PROMPT_COMMAND содержит имя функции, которая должна выполняться каждый раз, когда bash отображает подсказку. Для получения дополнительной информации см здесь .

Кроме того, если говорить о подсказках оболочки с поддержкой git, есть еще одно приятное дополнение к тому, что у вас уже есть. Помимо текущей ветки, вы можете получить информацию о любых незафиксированных изменениях. Смотрите, например это сообщение в блоге для функции parse_git_dirty().

3 голосов
/ 22 октября 2011

Попробуйте изменить последнюю строку на PROMPT_COMMAND=proml

; -)

...