Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
На главную -> MyLDP -> Тематический каталог -> Работа в консоли Linux

Как сделать приглашение командной строки Bash разноцветным

Алексей Дмитриев, 25 марта 2010

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

Вид приглашения командной строки Bash определяется переменной PS1. Его можно просмотреть как любую другую переменную окружения:

[ya@antony ~]$ echo $PS1

[\u@\h \W]\$

Сравнив вывод команды [\u@\h \W]\$ с самим приглашением [ya@antony ~]$ можно сделать следующие выводы:

1. Символы [, @, ], $ означают сами себя.

2. \u - специальный символ, означающий логин пользователя "ya".

3. \h - специальный символ, означающий имя компьютера (хоста) "antony".

4. \W - специальный символ, означающий рабочую директорию. (Как известно, тильда (~) обозначает домашнюю директорию).

В данном примере мы без труда разобрались со структурой переменной PS1 из дистрибутива AltLinux 4.1. В других дистрибутивах структура эта может оказаться далеко не столь очевидной. Например, в дистрибутиве Debian Lenny:

PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w]\$ "

Что означает вся первая часть \[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)} можно разобраться только с помощью специальных руководств. Даже man bash, где все специальные символы описаны вкратце в разделе PROMPTING (ПРИГЛАШЕНИЯ), не позволяет понять, что же там зашифровано. Зато последняя часть \u@\h:\w]\$ почти совпадает с разобранным нами приглашением AltLinux. Отсутствуют только квадратные скобки, да имеется двоеточие, а в целом приглашение выглядит так:

ya@antony:~$

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

Раскрашивание производится внесением определенных изменений в структуру переменной PS1.

Например, чтобы символ доллара сделать желтого цвета, нужно ввести следующую команду:

[ya@antony ~]$ PS1="[\u@\h \W]\[\033[33;1m\]\$ \[\033[m\]"

Вот результат:

Таким образом, чтобы расцветить некую часть приглашения, нужно непосредственно перед этой частью подставить выражение \[\033[Хm\]. В случае желтого цвета, вместо Х подставляем 33;1. Если подставить просто 33, то получится кирпичный цвет; если 33;4 то кирпичный подчеркнутый; если 33;5 то кирпичный символ станет мигать; если 33,7 то будет черный символ в кирпичном квадратике. К слову сказать, безразлично в каком порядке ставить значения вокруг точки с запятой, так 33;1 эквивалентно 1;33.

Вот таблица основных цветов

Черный		30
Темно-красный 	31 
Зеленый         32
Кирпичный	33
Синий		34
Фиолетовый      35
Бирюзовый       36
Серый 		37
Ярко-красный    38

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

31;1 	Розовый
33;1    Желтый 
и так далее.

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

Добавление к номеру цвета через точку с запятой пятерки дает мигающий символ:

Добавление к номеру цвета через точку с запятой семерки дает черный символ на фоне соответствующего цвета:

Если вместо номеров 30-38 подставить номера 40-48, то окрашиваться в те же самые цвета будут не символы, а фон вокруг них. Например:

Можно также составлять более сложные комбинации цветов фона и шрифта:

Словом, огромный простор для экспериментов.

Внимательно просмотрев все вышеприведенные команды PS1="..." следует обратить внимание, что все они заканчиваются одним и тем же выражением \[\033[m\]. Дело в том, что данное выражение равнозначно выражению \[\033[0m\], что задает "никакой" цвет, то есть тот цвет, что был первоначально. Это необходимо, чтобы весь дальнейший текст (вводимые команды, параметры, вывод команд) производился обычным цветом консольного текста, а не окрашивался в новые цвета.

При расцвечивании приглашения командной строки мы не обязаны ограничиваться только знаком доллара. Можно окрасить любую часть приглашения в один из перечисленных цветов. Например, окрасим ya@antony в темно-красный цвет. На черном фоне это будет заметно и не слишком ярко:

Раскрашивайте приглашение командной строки на свой вкус, однако помните, что стоит закрыть окно консоли, как все ваши краски исчезнут.

Для того, чтобы сделать разноцветное приглашение постоянным, его надо вписать в конец файла .bashrc в вашем домашнем каталоге. Вписываем в том же виде, как вводили в командную строку:

# Цвета приглашения командной строки:
PS1="[\[\033[31m\]\u@\h\[\033[m\] \W]\[\033[33;1m\]\$ \[\033[m\]"

Теперь окно эмулятора терминала будет всегда открываться с цветным приглашением. Также будет оно цветным и в терминале, открываемом при помощи комбинации клавиш CTRL+ALT+Fn.

Но стоит вам сменить логин, например на root, как консоль снова станет одноцветной. Это лишний раз напомнит вам, что вы обладаете правами суперпользователя и должны соблюдать осторожность. А можете раскрасить также и root-консоль, только в другие цвета, чтобы сразу было видно. Для этого нужно строку PS1="..." вписать в файл /root/.bashrc/.

Удачи!




Комментарии