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