Блог о программировании на PHP, Yii2, 1C-Bitrix

Изменение цвета приглашения терминала, linux

Приглашение в командной среде bash изменяется при помощи изменения переменных PSn.
Для того чтобы узнать текущие значения этих переменных можно воспользоваться командой echo.

echo $PS1

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

\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)
\nnn Непечатный символ, имеющий восьмеричный код nnn (к примеру esc)
\a Звуковой сигнал (ASCII-код 007)
\e escape (ASCII-код 033)
\[ Начало последовательности не печатаемых символов (этот символ
может быть использован для того, чтобы включить в текст подсказки
последовательность управляющих символов терминала)
\] Конец последовательности не печатаемых символов

Изменение цвета строки приглашения:

Изменение цвета строки приглашения командной оболочки делается при помощи последовательности

\[\е[#;##m\]
# — номер свойства цвета
## — номер цвета
Номера свойств текста:

Свойство Код
Значение по умолчанию 0
Повышенная яркость 1
Пониженная яркость 2
Подчеркнутый 4
Нормальная яркость 5
Инвертированный 7
Скрытый 8
Номера цветов:

Цвет Текст Фон
Черный 30 40
Красный 31 41
Зеленый 32 42
Желтый 33 43
Синий 34 44
Фиолетовый 35 45
Голубой 36 46
Белый 37 47

Для того, чтобы приглашение изменялось при старте, необходимо занести export PS1 в .profile файл.

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

PS1="\`if [ \$? = 0 ]; then echo \[\e[33m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\`\[\033[35m\]\t\[\033[m\]-\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h:\[\033[33;1m\]\w\[\033[m\]\\$ "