Формат строки выводимой в командной строке определяется значением переменной PS1. Давайте посмотрим что в ней храниться.
echo $PS1
Вы увидите некоторую последовательность символов. Что обозначает каждый из символов, вы можете найти в таблицах ниже.
Последовательность | Значение |
---|---|
\a | Заставляет компьютер издать звук |
\d | Текущая дата в формате «День недели, месяц, число» |
\h | Имя хоста локальной машины минус имя домена |
\H | Полное имя хоста |
\j | Число заданий действующее в текущем сеансе |
\l | Имя текущего устройства терминала |
\n | Символ перевода строки |
\r | Возврат каретки |
\s | Имя программы командной оболочки |
\t | Текущее время в 24-часовом формате |
\T | Текущее имя в 12-часовом формате |
\@ | Текущее имя в 12-часовом формате AM/PM |
\A | Текущее время в 24-часовом формате часы:минуты |
\r | Имя пользователя |
\v | Номер версии командной оболочки |
\V | Номер версии и выпуска командной оболочки |
\w | Имя текущего рабочего каталога |
\W | Последняя часть имени текущего рабочего каталога |
\! | Номер текущей команды в истории |
\# | Число команд, введённых в текущем сеансе командной оболочки |
\$ | Выводит символ $ если пользователь не является суперпользователем, иначе выводит # |
\[ | Отмечает начало последовательности из одного или нескольких непечатаемых символов. Используется для внедрения непечатаемых символов, управляющих поведением терминала, например, перемещает курсор или изменяет цвет текста. |
\] | Отмечает конец последовательности непечатаемых символов. |
Прежде чем менять исходное оформление строки приветствия. Сохраните оригинальный шаблон.
ps_old="$PS1"
Чтобы убедтьбся, что формат строки скопирован, распечатйте значение переменной ps_old.
echo $ps_old
Если потребуется восстановить прежнее значение, просто введите команду
PS1="$ps_old"
Экранированные последовательности для опрелеления цвета
последовательность | Цвет |
---|---|
\033[0;30m | Чёрный |
\033[0;31m | Красный |
\033[0;32m | Зелёный |
\033[0;33m | Коричневый |
\033[0;34m | Синий |
\033[0;35m | Пурпурный |
\033[0;36m | Бирюзовый |
\033[0;37m | Светло-серый |
\033[1;30m | Тёмно-серый |
\033[1;31m | Светло-красный |
\033[1;32m | Светло-зелёный |
\033[1;33m | Жёлтый |
\033[1;34m | Светло-синий |
\033[1;35m | Светло-пурпурный |
\033[1;36m | Светло-бирюзовый |
\033[1;37m | Белый |
Определения цвета фона
Последовательность | Цвет |
---|---|
\033[0;40m | Чёрный |
\033[0;41m | Красный |
\033[0;42m | Зелёный |
\033[0;43m | Коричневый |
\033[0;44m | Синий |
\033[0;45m | Пурпурный |
\033[0;46m | Бирюзовый |
\033[0;47m | Светло-серый |
\033[0m | Сбрасывает настройки цвета фона и текста |
Управление позицией каретки
Последовательность | Действие |
---|---|
\033[n;mH | Перемещает курсор в строку n и позицию m |
\033[nA | Перемещаетк курсор вверх на n строк |
\033[nB | Перемещает курсор вниз на n строк |
\033[nC | Перемещает курсор вправо на n символов |
\033[nD | Перемещает курсор влево на n символов |
\033[2] | Очищает экран и перемещает курсор в позицию 0 ; 0 |
\033[K | Очищает от каретки, до конца строки |
\033[s | Сохраняет текущую позицию каретки |
\033[u | Восстанавливает сохранённую позицию курсора |
На википедии есть огромная статья о ANSI escape code
Ниже приведена последовательность закрашивающая самую верхнюю строку красным цветом и печатающая время в этой строке.
"\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]"
Чтобы сохранить изменения на постоянной основе, откройте файл .bashrc и добавьте в него строки определявющую значение переменной PS1 и экспортирующую это значение.
PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]"
export PS1
Но для того чтобы изменить цвет строки призыва ввода, можно использовать следующий формат.
PS1="\[\033[1;36m\]\u@\h \W\$ \[\033[0\]"
export PS1
В каждом примере обязательным синтаксисом является заключения некоторых последовательностей в \[ шаблон \] .
В квадратные скобки заключаются последовательности непечатаемых символов. Это позволяет bash правильно вычислить длину строки приглашения. Без этого позиционирование каретки на экране могло бы выполняться неправильно. Попробуйте убрать все \[\] и поработать какое-то время, вы сам всё увидите.