Переменная PS1 — приглашение командной строки

PS1 — переменная окружения Bash, которая определяет, как выглядит приглашение командной строки.
А теперь по-русски. Вот мы запускаем эмулятор терминала или просто входим в виртуальный терминал и перед нами появляется приглашение к вводу — тот самый текст, что мы видим перед тем, как ввести команду.
Это может выглядеть строго или уныло или даже красиво (ну… если терминал, в принципе, может выглядеть красиво :))))

«PS1» расшифровывается как «Prompt String 1» — «Строка приглашения 1».

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

Давайте заглянем, что внутри этой переменной:

echo "$PS1"

Здесь мы можем увидеть спецсимволы, перед которыми стоит знак «\» (их ещё называют escape последовательности). Вот наиболее часто встречающиеся escape последовательности):
\u показывает имя текущего пользователя,
\h — имя хоста,
\w — полный путь к текущей директории
\W — название текущей директории (без пути)
\t — текущее время в 24-часовом формате.
Полный список escape последовательностей приведён в конце.

Ладно. Что с эти делать? Попробуем создать своё приглашение:

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

Новое приглашение получилось, но оно достаточно унылое. Попробуем расскрасить. Например так:

PS1="\[\e[32m\]\u@\h \[\e[34m\]\w\[\e[0m\] $ "

Здесь, помимо уже известных escape последовательностей добавились коды цветов (коды и список некоторых цветов в конце страницы). Вот как это работает: эти коды нужно поместить внутри специальной escape-последовательности [\e[ … m] и обязательно сбросить цвет в конце, чтобы он не влиял на остальной текст в терминале, например, таким кодом: [\e[0m].

Самым «красивым», по моему мнению, является стандартное приглашение в Gentoo/Calculate Linux. Давайте сделаем такой же (по сути, возьмём предыдущий пример, но ещё сделаем жирным шрифт(добавим «01;» перед кодом цвета)):

PS1="\[\e[01;32m\]\u@\h \[\e[01;34m\]\w\[\e[0m\] $ "

И, вероятно, нам захочется, чтобы это «красивое» приглашение работало всегда. Для этого нужно внести изменения в конфигурационный файл. В различных дистрибутивах этомогут быть разные файлы:
Альт/Симпли: /etc/bshrc
Астра: /etc/bash.bashrc
Ред ОС: /etc/bashrc

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

if [[ ${EUID} == 0 ]] ; then
     PS1="\[\e[01;31m\]\h \[\e[01;34m\]\w\[\e[0m\] # "
else
     PS1="\[\e[01;32m\]\u@\h \[\e[01;34m\]\w\[\e[0m\] $ "
fi

Управляющие escape последовательности:
\a Звуковой сигнал (ASCII bell)
\A Текущее время в 24-часовом формате без секунд (ЧЧ:ММ)
\@ Текущее время в 12-часовом формате с AM/PM
\D{формат} Дата и время в формате strftime, например \D{%Y-%m-%d}
\d Дата в формате «День недели Месяц Число» (например, Mon Jun 27)
\e ESC-символ (эквивалент \033)
\h Имя хоста до первой точки
\H Полное имя хоста (включая домен)
\j Количество фоновых задач (jobs) в текущей сессии
\l Базовое имя устройства терминала (tty)
\n Символ новой строки (перевод строки)
\r Символ возврата каретки
\s Имя оболочки (basename от $0, обычно bash)
\t Текущее время в 24-часовом формате с секундами (ЧЧ:ММ:СС)
\T Текущее время в 12-часовом формате с секундами
\u Имя текущего пользователя
\v Версия Bash (например, 5.3)
\V Релиз Bash (версия + уровень патча, например, 5.3.9)
\w Полный путь к текущей рабочей директории (~ вместо домашней папки)
\W Только имя текущей рабочей директории (без полного пути)
! Номер команды в истории (history)
# Номер текущей команды в рамках сессии
\$ Выводит # для root (UID 0), иначе $
\ Обратная косая черта ()
\[ и \] Не являются escape-последовательностями, но используются для добавлении цвета в PS1

Коды цветов:
Цвет     обычный / яркий
Черный     30 / 90
Красный    31 / 91
Зеленый    32 / 92
Желтый     33 / 93
Синий      34 / 94
Пурпурный (Magenta) 35 / 95
Голубой (Cyan) 36 / 96
Белый      37 / 97