20 августа 2010 в 16:45

Цветовое оформление консольного вывода

Кратко о том, как сделать для своей консольной программы или скрипта цветной вывод текста, а также дополнить его другими элементами оформления. Собственно, назначить можно цвет текста, цвет фона под ним, сделать текст жирным, подчеркнутым, невидимым и даже мигающим.

Шаблон для использования в современных командных оболочках и языках программирования таков: \x1b[...m. Это ESCAPE-последовательность, где \x1b обозначает символ ESC (десятичный ASCII код 27), а вместо "..." подставляются значения из таблицы, приведенной ниже, причем они могут комбинироваться, тогда нужно их перечислить через точку с запятой.
атрибуты
0 нормальный режим
1 жирный
4 подчеркнутый
5 мигающий
7 инвертированные цвета
8 невидимый
цвет текста
30 черный
31 красный
32 зеленый
33 желтый
34 синий
35 пурпурный
36 голубой
37 белый
цвет фона
40 черный
41 красный
42 зеленый
43 желтый
44 синий
45 пурпурный
46 голубой
47 белый


Теперь несколько примеров. Все это можно опробовать, введя в консольном окне echo -e "текст примера".

Ввод Результат
\x1b[31mTest\x1b[0m image
\x1b[37;43mTest\x1b[0m image
\x1b[4;35mTest\x1b[0m image


Обратите внимание, что во всех трех случаях после слова Test идет последовательность \x1b[0m, которая просто сбрасывает стиль оформления на стандартный.

Комплексный пример использования:
\x1b[1;31mСтрока\x1b[0m с
\x1b[4;35;42mразными\x1b[0m \x1b[34;45mстилями\x1b[0m
\x1b[1;33m
оформления\x1b[0m
image

Хорошая раскраска вывода часто значительно облегчает восприятие информации. Так что пробуйте и экспериментируйте.

P.S. Также об этом и некотором другом можно прочитать в man console_codes. Спасибо Riateche за подсказку.
Егор @flexoid
карма
8,0
рейтинг 0,0
Самое читаемое Администрирование

Комментарии (46)

  • +4
    man console_codes
    • +16
      Отлично, но я написал более специализированную, наглядную заметку. Ценность man'а я нисколько не занижаю.
  • +2
    Вспоминаю, как в 95-м, когда лабы по програмированию были на HPшном серваке с VT100 аппаратными терминалами мы «разукрашивали» соседские терминалы. Наш препод, который был ДОСовец, был в бешенстве… ;)
  • +5
    man tput
    • +2
      минусуй, не минусуй, а с tput все наглядней, чем с escape-последовательностями. и не потеряешься в символах экранирования и т.п.

      пример:
      RED=$(tput setaf 1) && echo -e $RED"test"
  • 0
    Вы случаем написали не от вдохновления от описания аналогичного, но более краткого, в электронном журнале FOSSNews_8_20?
    • +2
      Да нет, журнал этот не читаю (а стоило бы наверное).
      Просто писал как-то скрипт, вот и решил сделать его более наглядным. А чтобы не забыть и с другими поделиться, оформил в статью. Тем более, хотелось попробовать что-нибудь в Хабр написать.
      • +1
        В таком случае, с не плохим началом Вас. Welcome.
  • 0
    У меня такое-вот приглашение:

    img831.imageshack.us/img831/5195/putty.png
    • 0
      За цвет плюсую, но его длина просто огромна
      • 0
        Ничего лишнего ;)

        У меня putty обычно на полный экран раскрыт — его длинна не так важна =)
      • –9
        Это по вашему огромно? :) Вот моё… в правом-нижнем окне. Лень вырезать или делать новое: omploader.org/vNWFkMw/desktop.png
    • +1
      По моему скромному мнению, такое длинное приглашение лучше сделать двустрочным.
      • +2
        мои PS-переменные полностью солидарны с вашим скромным мнением
        • 0
          Можно значение PS переменной для такого приглашения? Хочу попробовать)
          • +1
            Посмотрите сюда.
            • 0
              Адля Bash такое реально сделать?
            • 0
              Можно еще раз ссылку перевыложить? :)
              • 0
                К сожалению мопед не мой )
                • 0
                  А копии не осталось?
        • +1
          Я этот PS на две минуты раньше запостил и получил минус в карму из-за того… что не могу вставлять картинки из-за низкой кармы? o.O
          • 0
            вчера вместо скрина показывало розовый текст типа ты гей. v_V
            • 0
              оно и сейчас так показывает.
          • 0
            по вашей ссылке иногда вместо вашего скрина появляется фиолетовая надпись «you are gays lol». если обновить страницу то появляется ваш скриншот.
            • 0
              Хороший повод больше никогда не использовать этот хостинг картинок.
    • +3
      В юности тоже разукрашивал приглашение, потом задолбало =)

      А в софте лучше использовать что-нибудь более высокоуровневое типа ncurses.
    • 0
      а зачем вывод даты-времени в приглашении?
      • 0
        иногда бывает полезно знать, когда выполнил какую-либо команду
      • 0
        Кому-то может так удобно, например, представьте что вы запустили что-то долговыполняющееся и отошли «покурить», по возвращении вы вы сразу видите, что можно было не отходить, так как оно завершилось через пять секунд после вашего ухода…
      • 0
        ну ладно со временем убедили, но дата то зачем? =)
        • +1
          Дата полезна в понедельник, чтоб не потеряться во времени. А вообще, если в голой консоли работать — замена стандартных апплетов-часов/календарей.
    • 0
      катастрофически длинное приглаешение.
  • +3
    использую дефолтное убунтовское приветствие — user@host:dir#
    раскрашивая user@host в красный для рута, зеленый для себя и желтый/синий/etc для серверов
    • 0
      абсолютно аналогично :)
  • 0
    zsh:
    PS1 = %F{green}[%f%B%F%n@%m%b%F{green}%B:%b%f%B%F{blue}%2~%f%b%F{green}]%f%F{red}%#%f
    Результат: [user@computername:~]%
    Слегка читабельнее, м?
  • 0
    можно еще так:

    echo -e '\033[34;40m' «BLUE» "\033[0m"

    а вот так будет цветная полоса через весь терминал:

    echo -e '\033[30;47m\n' '\t\t' «HELLO» '\033[0m'
  • +2
    Статья хорошая, больше информации можно почерпнуть из арчвики, например.
    wiki.archlinux.org/index.php/General_Recommendations#Colored_output

    Для раскраски вывода таких утилит, как lspci есть перловые скрипты cope
    github.com/cytzol/cope

    Собственно, как оно работает, ниже скриншотом. Пользуйтесь.
    s39.radikal.ru/i083/1008/20/e4526aadd03b.png
  • 0
    На стареньком сервере, который крутится уже 7 лет мучала консоль раскрашенная в зеленый цвет.

    Понял, где это написано, пофиксил.

    Автору спасибо!
  • 0
    Необходимо заметить, что не во всех эмуляторах терминала цвета работают одинаково. В konsole из kde3 не работает курсив, и полужирный сделан через ж.

    Потом, цветов текста больше, чем у вас написано. Не знаю тонкостей, но у меня есть цвета 90..96 — более яркие варианты 30..36.

    Также в статье можно было бы указать, что сами цвета обычно можно переопределить в настройках эмулятора терминала. Иногда по-умолчанию эти цвета выглядят не очень. Например, не различаются некоторые цвета на некотором фоне. Можно настроить под себя.
  • 0
    Еще при сборке ядра можно раскрасить вывод информационных сообщений. Для этого есть даже особая опция, ничего прикостыливать не нужно. Вот так вот.
    • НЛО прилетело и опубликовало эту надпись здесь
  • +1
    Довольно простая утилита для раскраски консоли goo.gl/oIBO
  • 0
    Спасибо, как памятка — отличная. Частенько эту информацию гуглить приходилось.
  • 0
    Лучше расскажите, как вернуть подсветку для файлов и директорий разными цветами в миднайте 4.7.0, в новой Ubuntu оно куда-то пропало… хотя в конфиге подсветка включена…
  • 0
    Статья хороша как памятка, поэтому, чтобы в будущем было больше шансов её найти, предлагаю автору расширить набор тегов:
    консоль, терминал, оформление, цвет, шрифт
  • 0
    Помнится, когда-то знакомые админы с помощью таких команд раскраски рисовали в /etc/mod ascii-артом ментовскую машину с мигалкой. Мигалка действительно мигала (через атрибут blinking). Жаль, текст этой красоты я не сохранил.

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