Как очистить форматирование 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, для каждой арифметики для команды, и до того, как первая команда будет выполнена в функции оболочки (см. ОБРАЗЕЦ ОБОЛОЧКИ выше).