Раскраска текста в терминале Linux
11 Sep, 2015 Sunrise 10
Команда 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"
Оценка:
Комментарии
jtad
12 сентября, 2015 - 10:12
В раскрашивании терминала есть своя прелесть :), от раскрашивания своего PS1 до подсветки логов. Кстати очень полезная утилита ccze для чтения логов, особенно если не знаешь что искать. Пример
ccze -A < /var/log/Xorg.0.log | less -R
У кого есть красивый PS1 постим сюда :)
dk
12 сентября, 2015 - 10:30
Еще была отличная вещь из той же серии — colordiff
dk
12 сентября, 2015 - 10:28
Только на разных терминалах может отображаться по разному (оттенки) либо вообще не заработать. Если нужна совместимость — рекомендуется пользовать tput (
мана, как ни странно, нет,ман есть, но не фонтан, посему гугль в помощь)Причем пользовать можно даже так:
#/bin/bash
BLUE=$(tput setaf 4)
RESET=$(tput sgr0)
echo "white text ${BLUE}blue text${RESET} white text"
jtad
12 сентября, 2015 - 10:55
а я о tput даже не слышал, было интересно почитать. Вообще есть много интересных вещей в линухе о которых большинство не знают или были забыты
dk
12 сентября, 2015 - 11:04
Ну просто вещь специфическая, и нужна не так часто. Зато есть почти везде (*BSD, MacOS) — так что вполне годно к использованию
Чингачгук
12 сентября, 2015 - 13:41
Спасибо! Очень полезно, буду использовать! И впервые не про Win10! ;)
MikhailVinakov
13 сентября, 2015 - 10:13
О. Прикольно!
Кстати, можно вывести отформатированный текст и вернуться к изначальному виду одной командой:
echo -e "\E[1;34m<Текст с форматированием>" "\E[0m"
pomodor
14 сентября, 2015 - 18:54
Взял на вооружение для скриптов на 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"
Жалко только, что это не кроссплатформенно. Но для системных скриптов вполне сгодится.
pomodor
14 сентября, 2015 - 19:00
Кстати, для ленивых даже готовый 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
Чингачгук
16 июня, 2016 - 12:06
а можно как то вставить условие? )
типа — if (слово такое то) то RED иначе — green
Комментировать