Скоро Новый Год, думать о серьёзной работе уже не хочется.

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

В некоторых дистрибутивах она уже «украшена»:



В других – она серая и неприметная:



А мы можем сделать, например, вот так:



Конечно, на вкус и цвет все фломастеры разные. Если подобная раскраска кажется вам аляповатой и неуместной, то знайте, что данная точка зрения имеет полное право на жизнь. А если вам тоже хочется добавить немного новогоднего настроения, читайте далее небольшую новогоднюю статью от Cloud4Y.


Для начала поясню, как «раскрашивается» вывод терминала. Делается это при помощи escape-последовательностей. А если точнее – управляющих кодовых последовательностей терминала ANSI/VT100. Что автоматически означает, что ваш эмулятор терминала должен этот стандарт поддерживать, иначе новогоднего чуда не случится. И да, предполагается, что $SHELL у вас bash.

Escape-последовательностями эти команды называют по той причине, что в начале каждой из них идёт ASCII-символ «escape». Управляющих последовательностей много, и они позволяют, к примеру, выводить настройки терминала, управлять отображением и перемещением курсора, изменять шрифт, удалять и скрывать текст. Мы же из всего разнообразия возможностей выберем одну – изменение цвета текста и фона.

Выполняем кодовую последовательность *ESC*[{attr1};...;{attrn}m
В качестве символа Escape используется его восьмеричная форма, то есть \033. Что касается атрибутов, то вот краткий перечень возможных значений:

0 Сбросить все атрибуты
1 Bright (повышенная яркость)
2 Dim (затемнение)
4 Underscore (нижнее подчеркивание)
5 Blink (мигание)
7 Reverse (инверсия)
8 Hidden (скрыть текст)

Foreground Colours (цвет пера, этим цветом выводится текст):
30 Black (черный)
31 Red (красный)
32 Green (зеленый)
33 Yellow (желтый)
34 Blue (синий)
35 Magenta (пурпурный)
36 Cyan (голубой)
37 White (белый)

Background Colours (цвет бумаги, или цвет фона):
40 Black (черный)
41 Red (красный)
42 Green (зеленый)
43 Yellow (желтый)
44 Blue (синий)
45 Magenta (пурпурный)
46 Cyan (голубой)
47 White (белый)

Обратите внимание, если теперь вы скомандуете в терминале: echo \033[0;31mнекоторый текст\033[0m’

… то предсказуемо получите на выходе монохромную абракадабру:



Почему? Потому, что надо было задействовать расширенные возможности команды echo. Достаточно добавить один ключик: echo -e ‘\033[0;31mнекоторый текст\033[0m’

Теперь вывод будет выглядеть правильно:



С раскраской вывода на терминал разобрались. Теперь давайте посмотрим, как раскрасить приглашение командной строки.

Это делается через изменение переменной PS1. Переменная отвечает за приглашение командной строки. Её внешний вид также можно изменять, в том числе при помощи escape-последовательностей. Но есть небольшое отличие: начинать последовательность нужно символом “\[”, а завершать символом “\]”, иначе она будет выведена на терминал.

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

\[\033[34;1m\]\t\[\033[0m\],\[\033[32m\]\u@\l@\h\[\033[0m\]:\[\033[33m\]\W\[\033[0m\],\[\033
[31m\]\!\[\033[0m\]\$\n

Расшифрую это страшное заклинание:

\[\033[34;1m\] — включаем ярко-синий (второй атрибут) цвет шрифта
\t – выводим текущее время в формате ЧЧ: ММ: СС
\[\033[0m\] – сброс настроек цвета шрифта
, — просто запятая (неожиданно, правда?)
\[\033[32m\] — включаем зелёный цвет шрифта
\u@\l@\h – выводим имя пользователя, номер терминального устройства и краткое имя хоста, разделяя символом “@”
[\033[0m\] — снова сбрасываем настройки цвета шрифта
: — просто двоеточие (внезапно!)
\[\033[33m\] — включаем жёлтый цвет шрифта
\W – выводим имя текущего каталога
[\033[0m\] — опять сбрасываем настройки цвета шрифта
, — ещё одна запятая (кто бы мог подумать!)
\[\033[31m\] — включаем красный цвет шрифта
\! — выводим номер команды в терминале
[\033[0m\] — не забываем сбросить настройки цвета шрифта
\$ — выводим “#” для root и “$” для всех остальных
\n – перевод строки. Зачем? Чтобы команда начиналась с левого края окна, а не с позиции конца приглашения командной строки.

Где переопределить переменную? Логичнее всего это сделать в ~/.bashrc.

Внешний вид приглашения ограничен только вашей фантазией. В принципе, вам ничто не мешает с помощью вышеописанного инструментария сделать приглашение командной строки в виде новогодней ёлочки. Правда, такое приглашение будет очень громоздким, и удобнее работа точно не станет. Ёлочку можно просто выводить над приглашением командной строки при входе в систему (всё равно нам нужно редактировать ~/.bashrc). Дерзайте! И спасибо за внимание.



Что ещё полезного можно почитать в блоге Cloud4Y

> Настраиваем top в GNU/Linux
> Пентестеры на передовой кибербезопасности
> Стартапы, способные удивить
> Нужны ли в ЦОД подушки?
> Дом, который построил робот

Подписывайтесь на наш Telegram-канал, чтобы не пропустить очередную статью! Пишем не чаще двух раз в неделю и только по делу. Также напоминаем, что корпоративный облачный провайдер Cloud4Y запустил акцию «Облако ФЗ-152 по цене обычного». Подать заявку можно до 31 декабря.

Комментарии (11)


  1. razielvamp
    24.12.2019 12:01

    Ну так-то, об этих раскрасках даже детсадовцы знают.


    PS а что означают красные цифры в конце строки приглашения?


    1. Cloud4Y Автор
      24.12.2019 12:03

      Да, баловство. Признаю
      Красные цифры — это номер команды в истории.


  1. vaniacer
    24.12.2019 12:08
    +1

    Ёлочка
    image


    1. Cloud4Y Автор
      24.12.2019 12:11

      Да, это смотрится!


  1. superconductor
    24.12.2019 16:11

    Хорошая елочка, но не хватает мигающих гирлянд \e[5;31m*[0m и шаров \e[1;35mO[0m


    1. Cloud4Y Автор
      24.12.2019 16:38

      Можно. Но будет раздражать :)


  1. RR_Zz
    24.12.2019 16:37

    А как вместо тильды выводить текущий абсолютный путь?


    1. Zvei
      25.12.2019 17:22

      \W


    1. hobo-mts
      25.12.2019 17:22

      Добавить куда нужно

      $PWD
      или
      $(pwd)


  1. delvin-fil
    24.12.2019 19:09

    Ну баловство же. Сразу теряется половина пространства.


  1. Gutt
    25.12.2019 17:03

    Ну да, а как ещё можно развлекаться в предрождественский вечер?! Я вот вчера празднично выглядящее ASCII-представления хеша SSH-ключа раскрашивал. Правда, PuTTy в режиме эмуляции vt100 блинк игнорирует.
    image