Блог о математике, программировании, алгоритмах. И немного о работе операционной системы Linux.

среда, 11 января 2012 г.

Tips & Tricks #6. Вывод текущей ветки git в приглашение командной строки bash. Ubuntu 10.04.

Для того, чтобы приглашение командной строки bash отображало текущую ветку git, в случае если текущая папка содержит git-репозиторий нужно изменить переменную окружения PS1.
Я решил эту проблему следующим образом. В корне домашней директории создал скрипт gitbranch.sh следующего содержания:
#!/bin/bash

GIT_BR=`git symbolic-ref HEAD 2> /dev/null | cut -b 12-`

if [ "$GIT_BR" = "" ]; then
    echo -n
else
    echo -n "($GIT_BR)"
fi
Этот скрипт возвращает название ветки в том случае, если текущая папка содержит репозиторий. Осталось только вписать его в нужное место в переменную PS1. В файле .bashrc, в домашнем каталоге нужно найти строчку инициализации переменной PS1. У меня это строка 52 и выглядит она так:
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[1;32m\]\u@\h\[\e[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Здесь строки вида \[\033[1;31m\] — это escape-последовательности задающие цвет. Нужно вставить в строку инициализации вызов созданного нами скрипта. Поскольку у меня подсветка shell-а включена, я менял первую строку. После изменения этот кусок кода стал выглядеть вот так:
if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\e[1;32m\]\u@\h\[\e[1;31m\] `~/gitbranch.sh`\[\e[00m\]:\[\e[01;34m\]\w\[\e[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
Символы \e — это краткая запись \033. После сохранения говорим:
source ~/.bashrc
И вуаля! У меня это выглядит так: