На этот вопрос уже есть ответ здесь:
Я добавил функцию в свой .bashrc
, чтобы проанализировать ветку git, в которой я сейчас работаю, и отобразить ее в моем bash-приглашении в соответствии с несколькими учебные пособия по этой теме.
Мой фрагмент кода выглядит так:
parse_git_branch() {
BRANCH=$(git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ "$BRANCH" != "" ]; then
echo -e "[\e[1;31m⎇ $BRANCH\e[1;37m]"
else
echo "╼"
fi
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[1;37m\]┌[\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;32m\]\H\[\033[1;37m\]] [\w]\n└$(parse_git_branch) \[\033[00m\]'
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
Как и ожидалось, текущая ветка git отображается красным цветом, если она есть: скриншот
Однако, если команда действительно длинная, строка больше не прерывается: другой снимок экрана
Проблема исчезнет, если я не использую флаг -e
для echo
в parse_git_branch
, но я нужно, чтобы он окрасил ветку в красный цвет.
Есть идеи, как это исправить?
Все остальные решения, которые я нашел при поиске в Google, просто выводят либо цветную ветку git, либо ничего, поэтому они не совсем работают для меня, так как я хочу, чтобы она распечатывала ветку git, если она есть , а если нет выведите этот ╼
-символ белым цветом.
Перенесите цветные последовательности в Escape readline как так:
echo -e "[\001\e[1;31m\002⎇ $BRANCH\001\e[1;37m\002]"
Escape readline \001
в начале непечатаемой последовательности, и \002
в конце. Они эквивалентны \[
и \]
, соответственно, в строке PS1.
Источник: ответ archemiro на подсказке удара и отзывающихся эхом цветах в функции - Переполнение стека