Как очистить форматирование PS1 в gnome-терминале?

Я настроил gnome-terminal в .bashrc иметь собственные цвета:

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;37m\][\[\033[00;32m\]\t\[\033[00;37m\]] \[\033[01;34m\]\u\[\033[00;37m\]@\[\033[01;34m\]\h\[\033[00;37m\]:\[\033[01;34m\]\w\[\033[01;32m\]$ '

А это значит, что при выполнении чего-то подобного:

Вывод выглядит так, хотя первая строка должна быть белой и белой, пока я не набрал команду, которая также набрана зеленым:

Так как же сделать так, чтобы цвет выходного текста не зависел от того факта, что я установил цвет команды зеленым? Я использую Ubuntu GNOME 15.04 с GNOME 3.16.

Обновление информации:

Я заметил, что при запуске sudo rkhunter --nocolor --update на выходе все зеленые.

1 ответ

Решение

Проблема в том, что вы устанавливаете команду зеленым цветом, но не закрываете escape-код цвета. Поэтому все последующие строки, включая выходные данные любых команд, к которым не применено их собственное форматирование, отображаются тем же цветом. В качестве обходного пути ( источник), вы могли бы trap печать кода закрытия для сигнала DEBUG. Добавьте эту строку в свой ~/bashrc

trap 'printf "\e[0m" "$_"' DEBUG

Это будет печатать \e[0m (который закроет открытый цветовой код). Потому что это так trapпед к DEBUG сигнал, он будет выполнен перед любой командой, которую вы запускаете. Итак, между нажатием Enter и командой на самом деле выполняется. Как объяснено в man bash:

Если sigspec равен DEBUG, команда arg выполняется перед каждой простой командой, для команды, команды case, команды select, для каждой арифметики для команды, и до того, как первая команда будет выполнена в функции оболочки (см. ОБРАЗЕЦ ОБОЛОЧКИ выше).

Другие вопросы по тегам