Цветное приглашение bash

 
color_bash_teaser.png

Для любителя UNIX-подобной ОС работать в терминале обычное дело. И вовсе не потому, что это неизбежность, а потому, что это удобно. Существует масса замечательных консольных UNIX-like утилит и программ, которые очень полезны, а порой и незаменимы.

Пожалуй его (терминал) можно сделать ещё удобнее.

При просмотре объёмных листингов или при чередующихся выводах можно легко потеряться где собственно вызывалась команда. Где последний раз появлялось приглашение командной строки. При работе сразу с несколькими вкладками (терминалами) иногда можно попутать свою машину с удалённым сервером (например). Подобного неудобства можно избежать вот таким изящным и наглядным способом.

Достаточно раскрасить (выделить цветом) приглашение командной строки или отдельные его части. Подобные приятные мелочи используются в дистрибутивах OpenSUSE (для выделения сеанса root) и KNOPPIX.

Сделаем то же самое и в Ubuntu.

До:
default_bash_promt_0.png

Цвет и структура приглашения командной строки bash устанавливается переменной окружения PS1. Эта переменная устанавливает первичное приглашение bash.

Эту переменную можно разместить в одном из стартовых скриптов. При интерактивном входе в систему первым читается файл .bash_profile в домашнем каталоге пользователя. Если его нет, то создайте и разместите там значение названной переменной (подробнее о стартовых скриптах можно прочитать в википедии или справке man).

Можно, например, указать такое значение:

PS1='\[\e[1;32m\]\[email protected]\h:\[\e[36m\]\w\[\e[33m\]\$ \[\e[m\]'

Тогда результат будет таким, как показано на снимке ниже

После:
color_bash_promt_0.png

Можно воспользоваться вот этим скриптом для получения всех возможных комбинация раскраски.

После его запуска вы увидите что-то на подобие вот этого:
bash_colors_0.png

Рашифровка ASCII последовательности кодирующей цвет вывода bash

В структуре кодировки приглашения распознаются следующие последовательности:

  • \[Начало последовательности непечатаемых символов (используется для включения в текст приглашения последовательности управляющих символов)
  • \] Конец последовательности непечатаемых символов
  • \nnn — Непечатный символ, имеющий восьмеричный код nnn (к примеру esc)
  • \a — Звуковой сигнал (ASCII-код 007)
  • \e — escape (ASCII-код 033)
  • \d — Дата в формате "День, месяц, число", например, Срд, Окт, 17.
  • \h — Имя хоста (hostname) до первой точки
  • \H — Полное имя хоста
  • \t — Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды)
  • \T — Текущее время в 12-часовом формате: HH:MM:SS
  • \@ — Текущее время в 12-часовом формате am/pm
  • \u — Имя пользователя, запустившего оболочку
  • \w — Полное имя текущего рабочего каталога (начиная с корня)
  • \W — Текущий рабочий каталог (без указания пути)
  • \$ — Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем.
  • \n — Новая строка (перевод строки)
  • \s — Имя оболочки
  • \# — Текущий номер команды
  • \! — Порядковый номер данной команды в истории команд
  • \\ — Обратный слэш (a backslash)

Последовательность вида \e[ATTR;FG;BGm задаёт цвет.
Где

  • ATTR — необязательный аттрибут,
  • FG — цвет переднего плана,
  • BG — цвет фона.

Установка цвета на значение по умолчанию — \e[m

ATTR можно указать из списка:

  • 0 — по-умолчанию
  • 1 — жирный
  • 22 — не жирный
  • 4 — подчеркнутый
  • 24 — не подчеркнутый
  • 5 — мигающий
  • 25 — не мигающий
  • 7 — инвертированный
  • 27 — не инвертированный