Раскраска текста в терминале 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"

5
Ваша оценка: Нет Средняя оценка: 5 (4 votes)

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

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

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
dk

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

Ваша оценка: Нет Средняя оценка: 5 (2 votes)
dk

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

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

#/bin/bash
BLUE=$(tput setaf 4)
RESET=$(tput sgr0)
echo "white text ${BLUE}blue text${RESET} white text"
Ваша оценка: Нет Средняя оценка: 5 (2 votes)

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
dk

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
MikhailVinakov

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

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
pomodor

Взял на вооружение для скриптов на 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"

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

Ваша оценка: Нет Средняя оценка: 5 (2 votes)
pomodor

Кстати, для ленивых даже готовый 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
Ваша оценка: Нет Средняя оценка: 5 (2 votes)

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

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

Ваша оценка: Нет
Отправить комментарий
КАПЧА
Вы человек? Подсказка: зарегистрируйтесь, чтобы этот вопрос больше никогда не возникал. Кстати, анонимные ссылки запрещены.
CAPTCHA на основе изображений
Enter the characters shown in the image.