Раскраска текста в терминале Linux

Команда echo в bash в Linux поддерживает форматирование текста. Сейчас я расскажу как это делать.

Для того, чтобы echo интерпретировала управляющие последовательности, она должна запускаться с ключом -e, а сама строка должна быть взята в кавычки, например:
echo -e "\E[1mПолужирный текст"
echo -e "\E[1;3mПолужирный курсив"
Сам синтаксис управляющих последовательностей выглядит так:
\E[(перечисление через ;)m

Список управляющих последовательностей

Форматирование текста

  • 0 — возврат к стандартному виду командной строки
  • 1 — жирный шрифт
  • 3 — курсив
  • 4 — подчёркивание
  • 5 — мигание текста
  • 8 — цветовая инверсия

Цвет текста

  • 30 — чёрный
  • 31 — красный
  • 32 — зелёный
  • 33 — жёлтый
  • 34 — синий
  • 35 — фиолетовый
  • 36 — голубой
  • 37 — белый

Цвет фона

  • 40 — чёрный
  • 41 — красный
  • 42 — зелёный
  • 43 — жёлтый
  • 44 — синий
  • 45 — фиолетовый
  • 46 — голубой
  • 47 — белый

Внимание! Управляющие последовательности действуют на весь текст дальше форматированной строки. Для возврата к стандартному виду командной строки введите команду:
echo -en "\E[0m"

Комментарии

В раскрашивании терминала есть своя прелесть :), от раскрашивания своего PS1 до подсветки логов. Кстати очень полезная утилита ccze для чтения логов, особенно если не знаешь что искать. Пример

ccze -A < /var/log/Xorg.0.log | less -R

У кого есть красивый PS1 постим сюда :)

Только на разных терминалах может отображаться по разному (оттенки) либо вообще не заработать. Если нужна совместимость — рекомендуется пользовать tput (мана, как ни странно, нет,ман есть, но не фонтан, посему гугль в помощь)

Причем пользовать можно даже так:

#/bin/bash
BLUE=$(tput setaf 4)
RESET=$(tput sgr0)
echo "white text ${BLUE}blue text${RESET} white text"

Еще была отличная вещь из той же серии — colordiff

а я о tput даже не слышал, было интересно почитать. Вообще есть много интересных вещей в линухе о которых большинство не знают или были забыты

Ну просто вещь специфическая, и нужна не так часто. Зато есть почти везде (*BSD, MacOS) — так что вполне годно к использованию

Спасибо! Очень полезно, буду использовать! И впервые не про Win10! ;)

О. Прикольно!
Кстати, можно вывести отформатированный текст и вернуться к изначальному виду одной командой:
echo -e "\E[1;34m<Текст с форматированием>" "\E[0m"

Взял на вооружение для скриптов на Ruby. Если вдруг кому понадобится, описываю как использовал. Сначала закатал все в модуль:


module Colorize
def colorize color
"\e[#{color}m#{self}\e[0m"
end

def red
colorize 31
end

def green
colorize 32
end

# ... и так далее ...
end

Теперь при необходимости можно подмешивать эти методы в класс String, что дает потрясающую простоту использования. Например, если мне потребуется вывести строку красным, то я просто напишу:

puts "Hello, World!".red

Здорово? ;) Сравните это с белибердой на bash:

echo -e "\E[31mHello, World!\E[0m"

Жалко только, что это не кроссплатформенно. Но для системных скриптов вполне сгодится.

Кстати, для ленивых даже готовый gem, оказывается, есть. :)


gem install colorize


require 'colorize'

puts "I am now red.".red
puts "I am now blue.".blue
puts "I am a super coder".yellow

а можно как то вставить условие? )

типа — if (слово такое то) то RED иначе — green

Комментировать

Filtered HTML

  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <strike> <code> <h2> <h3> <h4> <h5> <del> <img>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.