Как изменить формат строки приглашения в терминале Linux

Введение

Строка приветствия или приглашения (prompt) представляет собой текст, после которого пользователь может вводить команды в терминале Linux. В каждом дистрибутиве Linux строка приветствия имеет свою форму, например в CentOS 7 по умолчанию она выглядит так:

Вид строки приглашения по умолчанию в CentOS 7
Вид строки приглашения по умолчанию в CentOS 7

Форма строки приглашения хранится в переменной PS1

Увидеть шаблон, по которому строится строка приглашения можно с помощью вывода переменной PS1.

echo $PS1

[oleg@meliorem ~]# echo $PS1
[\u@\h \W]\$

Как видим строка состоит из обычных символов, которые выводятся в терминале как есть и экранированных символов вместо которых подставляются следующие данные:

  • \u - (user) имя текущего пользователя.
  • \h - (host) имя текущего хоста.
  • \W - (working directory) путь к рабочему каталогу (каталог, где сейчас находится пользователь).
  • \\$ - тип пользователя (# - для root, $ - для обычных пользователей).

Как изменить формат строки приглашения в терминале

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

Сохраним текущий формат строки приветствия в новую переменную - PS1_SAVE.

PS1_SAVE=$PS1

Чтобы изменить формат строки приглашения, нужно изменить значение переменной - PS1. Самая простая строка приглашения этот всего лишь один символ с пробелом.

PS1="► "

[oleg@meliorem ~]# PS1="► "
► 

Обычный текст не блещет информативностью, поэтому кроме него вам могут пригодиться экранированные символы, их список вы можете видеть ниже.

Простые экранируемые символы

  • \a - звуковой сигнал (ASCII: 07)
  • \e - символ escape-последовательности
  • \" - двойные кавычки
  • \\ - обратный слэш
  • \n - новая строка
  • \r - возврат каретки (курсора) на начало строки
  • \[- начало последовательности непечатных символов
  • \] - конец последовательности непечатных символов
  • \nnn - восьмеричный код символа (\113 -> K)

Вывод даты и времени

  • \d - дата в формате "день недели месяц число"
  • \D{формат даты} - дата в указанном формате, например \D{%d.%m.%Y}
  • \@ - время в 12 часовом  формате "часы:минуты AM\PM"
  • \A - время в 24 часовом  формате "часы:минуты"
  • \t - время в 24 часовом  формате "часы:минуты:секунды"
  • \T - время в 12 часовом  формате "часы:минуты:секунды

Вывод системной информации

  • \h - имя хоста до первой точки
  • \H - полное имя хоста
  • \j - количество работ (jobs), выполняемых в терминале (скрытых после нажатия Ctrl+Z)
  • \s - имя текущей оболочки (вывод значения переменной - $0)
  • \u - имя текущего пользователя
  • \v - версия оболочки BASH
  • \V - более детальная версия оболочки BASH
  • \w - полный путь к текущей директории
  • \W - имя текущей директории
  • \! - номер текущей команды в истории команд
  • \# - номер текущей команды за период сессии
  • \\$ - тип пользователя (# - для root, $ - для всех остальных)

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

PS1="\u@\h:\w\n\$ "

[oleg@meliorem ~]# PS1="\u@\h:\w\n\\$ "
oleg@meliorem:/var/www
#

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

PS1=$PS1_SAVE

Для того чтобы изменения переменной PS1 были сохранены для последующих сессий в терминале, нужно прописать значение этой переменной в файлах настроек терминала ~/.bashrc или /etc/bashrc.

Сохранение нового формата строки приглашения на постоянной основе

При каждом запуске терминала значение переменной PS1 устанавливается в соответствии с тем значением, которое указано в файле /etc/bashrc. Однако крайне не рекомендуется изменять что-либо в этом файле. Вместо редактирования файла /etc/bashrc предусмотрен специальный каталог /etc/profile.d, в котором можно создавать свои файлы *.sh с необходимым вам функционалом. 

Создадим файл /etc/profile.d/custom.sh для необходимой нам настройки оболочки bash. Данный файл будет автоматически импортирован в /etc/bashrc, поэтому никаких дополнительных действий не потребуется.

touch /etc/profile.d/custom.sh

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

vi /etc/profile.d/custom.sh

PS1="\e[1;38;5;48m\u@\h\e[m:\e[1;38;5;45m\w\e[m\n\\$ "
# Добавим сообщение для авторизованных пользователей
logged_user=$USER # Логин пользователя
echo -e "\e[1;38;5;215mЗдравствуйте ${logged_user^}, добро пожаловать на сервер meliorem.ru!\e[0m"

Для применения новых настроек в файле /etc/profile.d/custom.sh необходимо перезапустить терминал. Также для перезапуска можно использовать команду exec.

exec bash

Теперь когда пользователь будет заходить в свою учетную запись в терминале, он увидит следующий результат.

Результат изменения строки приглашения в файле /etc/profile.d/custom.sh
Результат изменения строки приглашения в файле /etc/profile.d/custom.sh

Важно, что все эти настройки будут применены для всех пользователей. Если вы хотите настроить bash только для одного пользователя, то используйте скрытый файл .bashrc, который находится в домашнем каталоге пользователя. Для применения настроек в ~/.bashrc необходимо будет перезапустить оболочку - source ~/.bashrc

Вы также можете раскрасить свою строку приветствия, о том как это сделать вы можете почитать здесь.