Код, который у вас есть, отлично работает на моем Debian. Ваша проблема может быть в том, что OSX echo
неправильно печатает 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 → "