Я пытался интегрировать текущее ответвление мерзавца в своей подсказке, но это не ведет себя как ожидалось. Я использую удар на человечности 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=...
Хорошо я нашел решение. Не необходимо использовать быструю команду. Ошибка возникает из-за синтаксической ошибки.
, Если я присваиваю содержание PS1 с ""
для использования моих переменных для цветов, это только выполняется __ git_ps1 функция, когда .bashrc
получен.
, Но когда я присваиваю содержание PS1 в ''
и делаю это без переменных для цвета и вместо этого пишут коды, это работает как ожидалось. И поскольку я читал здесь , это, кажется, лучшая практика для не экспорта PS1 в среду.
, Таким образом, решение похоже:
PS1='\[\033[01;35m\]\u \[\033[01;32m\]$(__git_ps1 " (%s)") \[\033[01;34m\]\W \[\033[00m\] \$ '
Однако мне было бы любопытно знать, какова причина этого. Это работает в ""
в macOS.
Поэтому .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) показывают нам, на что Ваша подсказка, как предполагается, похожа.
Столкнулся с той же проблемой. Можно просто выйти $(...)
кому: \$(...)
export PS1="$purple\u $green\$(__git_ps1 " (%s)") $blue\W $no_color \$ "