Подсказка не обновляет ответвление мерзавца

Я пытался интегрировать текущее ответвление мерзавца в своей подсказке, но это не ведет себя как ожидалось. Я использую удар на человечности 16.04 и мерзавце 2.7.4. Когда я запускаю терминал, ничто из мерзавца не показывают. Если я получаю мой .bashrc из репозитория ответвление показывают, но больше не обновляет. Это - то, что я записал в своем .bashrc:

green="\[\033[01;32m\]"
blue="\[\033[01;34m\]"
no_color="\[\033[00m\]"
purple="\[\033[01;35m\]"

source ~/.git-prompt.sh
export PS1="$purple\u $green$(__git_ps1 " (%s)") $blue\W $no_color \$ "

Обновление:

Я попробовал, следуют инструкциям в подсказке мерзавца, но тем не менее том же результате. Однако, если я просто копирую предложение с подсказки мерзавца: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' это работает, но конечно не похоже, я хочу. Есть ли некоторая синтаксическая ошибка, которую я пропускаю? Шаблон PS1 работает, даже если не используют экспорт, просто PS1=...

4
задан 24 March 2017 в 19:43

3 ответа

Хорошо я нашел решение. Не необходимо использовать быструю команду. Ошибка возникает из-за синтаксической ошибки.

, Если я присваиваю содержание PS1 с "" для использования моих переменных для цветов, это только выполняется __ git_ps1 функция, когда .bashrc получен.

, Но когда я присваиваю содержание PS1 в '' и делаю это без переменных для цвета и вместо этого пишут коды, это работает как ожидалось. И поскольку я читал здесь , это, кажется, лучшая практика для не экспорта PS1 в среду.

, Таким образом, решение похоже:

PS1='\[\033[01;35m\]\u \[\033[01;32m\]$(__git_ps1 " (%s)") \[\033[01;34m\]\W \[\033[00m\] \$ '

Однако мне было бы любопытно знать, какова причина этого. Это работает в "" в macOS.

5
ответ дан 1 December 2019 в 09:13

Поэтому .bashrc только для чтения однажды: когда Вы запускаете новую интерактивную оболочку невхода в систему (при открытии нового терминала, например). Так PS1 установлен в первый раз, когда Вы открываете терминал, и никогда не изменяется.

Правильный способ сделать это (принятие Вашего git-prompt и __git_ps работа сценариев как ожидалось), должен использовать PROMPT_COMMAND. Как объяснено в man bash:

   PROMPT_COMMAND
          If set, the value is executed as a command prior to issuing each
          primary prompt.

Вы хотите __git_ps1 чтобы быть выполненной перед, каждую подсказку показывают (поэтому после каждой команды, которую Вы выполняете; после a cd, например). Поэтому необходимо поместить его в PROMPT_COMMAND. Если Ваш __git_ps1 то, что я думаю, что это, это будет устанавливать PS1 для Вас. Просто необходимо выполнить его каждый раз, когда подсказку показывают. Так, добавьте эту строку к Вашему ~/.bashrc:

PROMPT_COMMAND="$purple\u $green$(__git_ps1 "(%s)") $blue\W $no_color \$ "

Наконец, я не могу быть уверен, так как Вы не показываете соответствующие сценарии, но я очень сомневаюсь что (%s) имеет смысл там. Это просто распечатает строку %s. Если Вы нуждаетесь в большем количестве помощи, отредактируйте свой вопрос, и i) включают обоих __git_ps1 и /etc/bash_completion.d/git-prompt (или скажите нам, как Вы установили их, если они произошли из пакета Ubuntu), и ii) показывают нам, на что Ваша подсказка, как предполагается, похожа.

2
ответ дан 1 December 2019 в 09:13

Столкнулся с той же проблемой. Можно просто выйти $(...) кому: \$(...)

export PS1="$purple\u $green\$(__git_ps1 " (%s)") $blue\W $no_color \$ "
0
ответ дан 1 December 2019 в 09:13

Другие вопросы по тегам:

Похожие вопросы: