Цель
Я пытаюсь раскрасить свое приглашение bash в Mac OS X с помощью ветки git (если доступно).
Что я пробовал
Обладая ограниченными знаниями о bash, я собрал следующий код из результатов поиска Google и других вопросов:
function parse_git_branch() {
branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [[ -z "$branch" ]]; then
return
fi
if [[ -z "$(git status -s 2>/dev/null)" ]]; then
color=$'\e[1;32m'
else
color=$'\e[1;31m'
fi
echo "\[$color\] (${branch}) "
}
PS1="\h:\W \u\$(parse_git_branch)\[\e[0m\]\$ "
Эта проблема
Пока окраска работает, приглашение содержит некоторые escape-последовательности из parse_git_branch
.
leonidas:AYI jason\[\] (master) $
Кроме того, такие вещи, как история команд (вверх) и рекурсивный поиск (ctrl + r), дают дополнительные символы.
leonidas:AYI jason\[\] (master) $h)`re': git status
Вопросы
- Как я могу исправить экранирование правильными видимыми и невидимыми символами.
- Должен ли я использовать
tput
вместо этих цветовых кодов для более широкой поддержки?
PS1="...$(parse_git_branch)..."
, он оценивается точно один раз при поиске файла. Вам нужноPS1='...'
, чтобы он оценивался каждый раз. - person Kevin   schedule 30.12.2013