Я хочу, чтобы мой 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

1 ответ1

0

Код, который у вас есть, отлично работает на моем Debian. Ваша проблема может быть в том, что echo OSX не печатает escape-последовательность правильно.

Как правило, лучше избегать echo и использовать printf поскольку разные системы имеют разные реализации echo что может повлиять на переносимость ваших сценариев и вызвать другие проблемы. Смотрите здесь для (гораздо) более подробной информации.

В любом случае, попробуйте заменить echo s в вашей функции на `printf:

branch_color() {
    if git status 2>/dev/null | grep --quiet "nothing to commit"; then
        printf "\e[0;94m"
    else
        printf "\e[0;91m"

    fi
}
PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "



PS1="\[$IGreen\]\u \[$ICyan\][\W]\[\$(branch_color)\]\$(parse_git_branch)\[$IWhite\] \n → "

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .