
У меня PS1
это заканчивается открывающей последовательностью цветов (например \[\e[0;32m\]
, ), чтобы весь текст в терминале был окрашен (в данном случае зеленым). Однако, когда я использую команду, например ls
(которая имеет псевдоним ls --color=auto
в моем .bashrc
), цвета в выводе немного перепутаны: зеленый до первого «цветного» слова, а следующий неокрашенный текст белый вместо зеленого.
Есть ли способ получить чистый вывод во всех случаях? Меня устраивает белый цвет текста «по умолчанию», когда вывод содержит цвета, но я хотел бы, чтобы он был единообразным.
Конечно, мне больше всего хотелось бы решение, которое автоматически применялось бы ко всем командам и не требовало бы от меня изменения способа их вызова.
Лично у меня нет никаких идей. Может быть, можно что-то сделать, чтобы искать escape-последовательности в выводе "на лету" и выполнять какие-то замены? Я не знаю, как это реализовать, тем более, чтобы это делалось "за кулисами".
решение1
Причина в том, что вы делаете это неправильно.
Вы сказали, что у вас есть "открытая" цветовая последовательность в конце вашего запроса. Это неверно. Цветане гнездятся. Нет никаких "открыть" и "закрыть". Это "переключиться на ..." или "сбросить на значение по умолчанию" (что на самом деле "переключиться на 0"). Поэтому, когда ls --color=auto
переключается цвет для чего-то, когда это сделано, он выдает последовательность для сброса на значение по умолчанию. Это не "вернуться к тому, что было раньше".
Установите терминал на использование цвета текста, который вы хотите сделать "по умолчанию" (т.е. палитру номер 0). Затем, если вы хотите, чтобы ваш запрос имел другой цвет, установите его в начале и сбросьте в конце.
Для получения дополнительной информации прочтите Bash Prompt HOWTOГлава 6. Escape-последовательности ANSI: цвета и перемещение курсорадокументация.
решение2
Как уже было сказано, окончание PS1
с открывающей последовательностью цветов — не очень хорошая идея. Это сделает вывод цветных команд неправильным. Если вы хотите, чтобы цвет переднего плана вашего терминала (обычный цвет текста) был зеленым, просто установите его на зеленый в настройках эмулятора терминала на обеих машинах — в данном случае в guake
настройках вашего терминала. Таким образом, цвет переднего плана останется зеленым, а команды с цветным выводом будут использовать этот цвет для отображения обычного текста. Сбросьте приглашение, PS1
как это должно быть сделано с помощью \[\e[0m\]
.
решение3
Вот как я делаю подсказки разного цвета для разных машин.
case $HOSTNAME in
host1*) PSC="\e[32m" ;;
host2*) PSC="\e[33m" ;;
host3*) PSC="\e[34m" ;;
host4*) PSC="\e[35m" ;;
*) PSC="\e[36m" ;;
esac
PS1="[\j]\[${PSC}\]\u@\h(\l) \[\e[37m\][ \w ]\[\e[00m\]\n\[\e[1m\]\#\[\e[0m\] \$ "
Остальное вы можете настроить по вкусу. Поместите копию этого ~/.bashrc на каждую используемую вами машину. Если вы используете смонтированный NFS домашний каталог, то это просто автоматически.