Я хочу, чтобы мой PS1 отображал (если я нахожусь в папке git) ветвь и окрашивал ветку красным, если рабочий каталог грязный, и синим, если он чистый. Вот то, к чему я пришел
IBlack='\e[0;90m' # Nero
IRed='\e[0;91m' # Rosso
IGreen='\e[0;92m' # Verde
IYellow='\e[0;93m' # Giallo
IBlue='\e[0;94m' # Blu
IPurple='\e[0;95m' # Viola
ICyan='\e[0;96m' # Ciano
IWhite='\e[0;97m' # Bianco
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
branch_color() {
if git status | grep --quiet "nothing to commit"; then
echo -e "$IBlue"
else
echo -e "$IRed"
fi
}
PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "
Теперь код печатает это:
francesco [demo_app]\e[0;94m (master)
→
где francesco - мое имя пользователя, demo_app - папка, а master - ветвь. последовательность \e [0; 94m изменяется, если я создаю файл в рабочем каталоге, но цвет не анализируется, как вы можете видеть.
Затем я попытался изменить PS1 следующим образом:
PS1="\[$IGreen\]\u \[$ICyan\][\W]\[$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "
удаляя '\' раньше (branch_color), и теперь он анализирует цвет, но не меняется при изменении статуса рабочего каталога.
Как я могу решить это? Извините, если мне было непонятно.
Francesco