Ошибка цвета терминала OSX El Capitan/.bash_profile

Недавно я обновился до El Capitan, и у меня возникли некоторые проблемы с моим терминалом, и я сузил их до моего .bash_profile. У меня есть это в моем .bash_profile, поэтому приглашение изменит цвет в зависимости от изменений в git.

# A more colorful prompt
# \[\e[0m\] resets the color to default color
c_reset='\[\e[0m\]'
# \e[0;31m\ sets the color to red
c_path='\[\e[0;31m\]'
# \e[0;32m\ sets the color to green
c_git_clean='\[\e[0;32m\]'
# \e[0;31m\ sets the color to red
c_git_dirty='\[\e[0;31m\]'

Он работал с последним обновлением от OSX Yosemite. Кроме того, насколько я могу судить, цветовые коды верны. Однако вот как выглядит мой терминал:

github.io [\[\e[0;31m\]working\[\e[0m\]]:>

Как видите, я нахожусь в своей «рабочей» ветке каталога github. Все, чего нет на github, выглядит нормально.

Downloads:> 

На данный момент я переключился на iTerm, у которого, похоже, нет проблем с последней версией (которая обновлена ​​​​для размещения El Capitan). Оставив меня думать, что это проблема с терминалом, а не с github.

Снимок экрана терминала


person nathanmjpark    schedule 06.10.2015    source источник
comment
Escape-последовательности жесткого кодирования гарантируют, что они будут работать только на определенном типе терминала. Правильный способ — использовать возможности терминала, которые генерируют соответствующие управляющие последовательности для типа терминала.   -  person alvits    schedule 22.06.2016


Ответы (2)


Я обнаружил, что tput setaf хорошо работает для меня. Документация здесь.

# A more colorful prompt
# \[\e[0m\] resets the color to default color
c_reset=$(tput setaf 0)
#  \e[0;31m\ sets the color to purple
c_path=$(tput setaf 55)
# \e[0;32m\ sets the color to green
c_git_clean=$(tput setaf 2)
# \e[0;31m\ sets the color to red
c_git_dirty=$(tput setaf 9)

Чтобы увидеть все цвета, я запустил один из скриптов из этой документации:

for C in {0..255}; do
    tput setaf $C
    echo -n "$C "
done
tput sgr0
echo

Затем какие бы цвета вы ни хотели, вы знаете число, которое нужно вставить после «tput setaf»

Примечание: похоже, у нас один и тот же источник bash_profile. Я также обнаружил, что обновление до El Capitan сломало его. Вы также можете исправить цвет пути, добавив точку с запятой в середине этой строки:

# PS1 is the variable for the prompt you see everytime you hit enter
PROMPT_COMMAND=$PROMPT_COMMAND'; PS1="${c_path}\W${c_reset}$(git_prompt) :> "'

Кажется, это также исправило мой цвет имени пути. :)

person NellyLC    schedule 21.06.2016
comment
Это лучший ответ. tput генерирует управляющую последовательность, соответствующую типу терминала. - person alvits; 22.06.2016

Возможно, проще всего просто установить для всех них цвет терминала по умолчанию. Эта escape-последовательность работает правильно в вашем примере с терминалом:

# A more colorful prompt
# \[\e[0m\] resets the color to default color
c_reset='\[\e[0m\]'
# \e[0;31m\ sets the color to red
c_path='\[\e[0m\]'
# \e[0;32m\ sets the color to green
c_git_clean='\[\e[0m\]'
# \e[0;31m\ sets the color to red
c_git_dirty='\[\e[0m\]'

Если это не сработает. посмотрите, есть ли у вас доступ к tput и получите от него необходимые цвета. Или, наконец, вы можете попробовать использовать escape-последовательности ANSI.

Возможно, попробуйте поэкспериментировать с управляющими последовательностями ANSI в терминале, используя printf:

printf "\033[32m This will appear green on most terminals\n"

printf "\033[31m This will appear red on most terminals\n"
person Community    schedule 06.10.2015
comment
Спасибо! Я обязательно должен это проверить. - person nathanmjpark; 07.10.2015