Настройка Bash-приглашения (PS1): цвета, команды и примеры

Быстрые ссылки
Где хранится переменная Prompt
Как создать собственное Bash-приглашение
Как добавить цвета в Bash-приглашение
Как сделать новое приглашение по умолчанию
Большинство дистрибутивов Linux по умолчанию настраивают приглашение Bash примерно как
username@hostname:directory$Но вы можете настроить приглашение так, как вам удобно, включая любые цвета и дополнительные блоки информации.
Эти примеры проверялись на Ubuntu 16.04 LTS; процесс аналогичен в других дистрибутивах, хотя дефолтный .bashrc и стандартное приглашение могут немного отличаться.
Где хранится переменная приглашения
Конфигурация приглашения Bash хранится в файле .bashrc вашего пользователя:
~/.bashrcЕсли ваш пользователь bob, файл находится по пути
/home/bob/.bashrcОткройте файл, чтобы посмотреть текущую переменную PS1. В примерах используем nano, но можно взять vi, emacs или другой редактор. В терминале выполните:
nano ~/.bashrcПрокрутите вниз до секции с PS1=. Часто в .bashrc будет два значения: цветное и нецветное. Без цветовых кодов типичная строка выглядит так:
${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Эта строка включает кусок ${debian_chroot:+($debian_chroot)} — он показывает, если вы в Debian chroot, обычно не отображается. Игнорируя этот кусок, базовая структура выглядит так:
\u@\h:\w\$Краткие значения:
\u— имя пользователя.@— символ собачки.\h— имя хоста до первой точки.:— символ двоеточие.\w— рабочая директория (сокращение $HOME в~).\$—$для обычного пользователя,#для root.
Чтобы изменить приглашение, добавьте, удалите или переупорядочьте специальные последовательности в PS1. Но доступно гораздо больше кодов, чем только эти.
Выйдите из редактора (в nano — Ctrl+X). Ниже покажу, как экспериментировать с переменной без сохранения в .bashrc.
Как создать пользовательское Bash-приглашение
PS1 — это переменная, в которую записывается строка приглашения. Сначала сохраните текущий PS1, чтобы быстро вернуться:
DEFAULT=$PS1Теперь можно менять PS1 во время сессии для экспериментов. Примеры:
PS1="\u\$ "
PS1="\u:\w\$ "Если нужно вернуть исходный вид:
PS1=$DEFAULTИзменения, сделанные таким образом, действуют только в текущем терминале. Закрытие окна или выход восстановит .bashrc-приглашение; но сохранённая переменная DEFAULT позволяет быстро вернуться.

Вы можете добавлять любые символы или текст. Например, чтобы добавить префикс “Hello World”:
PS1="Hello World \u@\h:\w\$ "Полный список специальных последовательностей
Ниже — сокращённый и отформатированный список популярных спецсимволов из руководства Bash (bash manual). Кратко — что делает каждая последовательность:
\a— звуковой сигнал (bell).\d— дата в формате “Weekday Month Date” (например, “Tue May 26”).\D{format}— формат даты/времени, передаётся в strftime(3).\e— escape-символ.\h— имя хоста до первой точки.\H— полное имя хоста.\j— количество задач, управляемых оболочкой.\l— базовое имя терминального устройства.\n— новая строка.\r— возврат каретки.\s— имя оболочки (basename $0).\t— время в 24-часовом формате HH:MM:SS.\T— время в 12-часовом формате HH:MM:SS.\@— время в 12-часовом am/pm формате.\A— время в 24-часовом HH:MM формате.\u— имя текущего пользователя.\v— версия Bash.\V— релиз Bash (версия+патч).\w— текущая рабочая директория (сокращает $HOME до ~).\W— basename от $PWD.\!— номер истории команды.\#— порядковый номер команды в сессии.\\$—#или$в зависимости от UID (в коде:\$).\\nnn— символ с ASCII-кодом в восьмеричной форме.\\\\— обратный слеш.\[и\]— начало/конец непечатаемых символов (нужно для правильной длины приглашения).
Пример: добавить дату и время и поместить директорию на второй строке:
PS1="[\d \t] \u@\h\n\w\$ "Квадратные скобки здесь необязательны, но делают строку удобнее для чтения.
Вставка вывода команды в приглашение
В приглашение можно подставлять результат любой команды: Bash выполнит её каждый раз, когда рисует приглашение. Поместите команду в обратные апострофы (grave accent) — не кавычки, а (обычно над Tab). Примеры: Показать версию ядра в приглашении: ``` PS1="\u@\h onuname -s -r\w\$ " ``` Показать uptime и load average на отдельной строке: ``` PS1="(uptime)\n\u@\h:\w$ " ```  Используйте эту возможность аккуратно: команды в приглашении выполняются каждый раз, когда выводится приглашение, поэтому тяжёлые или медленные вызовы замедлят каждую команду в интерактивной сессии. ## Как добавить цвета в приглашение Bash Цвета добавляются при помощи ANSI-escape последовательностей. Это просто, но визуальная строка выглядит сложной из-за escape-последовательностей и необходимости помечать непечатаемые части[и]. Пример цветного дефолтного приглашения: ``` ${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ``` Упростив, убрав debian_chroot, получаем: ``` \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ``` Разбивка на логические части: ``` \[\033[01;32m\] \u@\h # зелёный \[\033[00m\] : # сброс цвета \[\033[01;34m\] \w # синий \[\033[00m\] \$ # сброс ``` Важно: все непечатаемые escape-последовательности должны быть обёрнуты в[и]. Это нужно Bash, чтобы корректно вычислять длину приглашения и поддерживать корректное позиционирование курсора. ### Формат цветового тега Общий вид: ``` \[\033[COLORm\] ``` (в реале вы подставляете числа вместо COLOR, возможно указывая атрибут и цвет через точку с запятой). Цвета для текста (foreground): - 30 — черный - 31 — красный - 32 — зелёный - 33 — желтый - 34 — синий - 35 — пурпурный - 36 — циан - 37 — белый Атрибуты текста: - 0 — нормальный - 1 — жирный/яркий - 2 — тусклый - 4 — подчёркнутый - 5 — мигающий (работает редко) - 7 — инверсия - 8 — скрытый Фоновые цвета (background) — те же числа + 10 (например, 41 — красный фон): - 40 — фон черный - 41 — фон красный - 42 — фон зелёный - 43 — фон желтый - 44 — фон синий - 45 — фон пурпурный - 46 — фон циан - 47 — фон белый Примеры: - Жирный красный текст:[\033[1;31m]- Синий фон:[\033[44m]- Сброс форматирования:[\033[00m]Чтобы покрасить определённую часть в красный на зелёном фоне: ``` PS1="\[\033[42m\]\[\033[31m\]\u@\h:\w\[\033[00m\]\$ " ``` Не забудьте в конце участков возвращать[\033[00m], чтобы цвет не распространялся на вводимые команды. ### Частые ошибки с цветами - Отсутствие[и]вокруг escape-последовательности вызывает кривое поведение курсора при редактировании строк и неправильное позиционирование. - Использование тяжёлых команд в подстановках (например, сложный скрипт вместоuptime) сделает каждую отрисовку приглашения медленной. - Неэкранированные спецсимволы или незакрытые кавычки ломают .bashrc при старте. ## Как сделать новое приглашение постоянным После того как вы подобрали понравившийся PS1 во временной сессии, запишите его в~/.bashrc. 1. Откройте~/.bashrc: ``` nano ~/.bashrc ``` 2. Найдите секцию, где определяется PS1 и где переменнаяcolor_promptпроверяется: ``` if [ "\"$color_prompt\"" = "\"yes\"" ]; then PS1=... else PS1=... fi ``` 3. Замените PS1 внутри блока на вашу строку. Рекомендуется оставить${debian_chroot:+($debian_chroot)}как есть. 4. Сохраните файл (Ctrl+O, Enter в nano) и выйдите (Ctrl+X). 5. Проверьте результат, открыв новый терминал или выполнив: ``` source ~/.bashrc ```  Если приглашение сломалось и вы не можете открыть терминал, откройте TTY (Ctrl+Alt+F3) или подключитесь по SSH и откатите изменения.  ## Практические примеры PS1 Пример 1 — минималистичное приглашение с именем пользователя и знаком$: ``` PS1="\u\$ " ``` Пример 2 — пользователь, хост и рабочая директория во второй строке: ``` PS1="\[\033[1;32m\]\u@\h\[\033[0m\]\n\[\033[1;34m\]\w\[\033[0m\]\$ " ``` Пример 3 — показывать время, git-ветку (легкая функция) и цвет для статуса: ``` PS1="\[\033[0;36m\]\A \[\033[0;33m\]\u@\h\[\033[0m\] \[\033[0;35m\]\w\[\033[0m\]\[\033[0;31m\]\$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)\[\033[0m\]\n\$ " ``` Замечание: строка с git-веткой запускаетgitи может замедлить отображение в больших репозиториях; используйте кэширование или лёгкие проверки. ## Методология проектирования приглашения (мини-метод) 1. Определите цели: что важно видеть (директория, хост, git, время, нагрузка). 2. Минимизируйте тяжёлые вычисления (никаких долгих скриптов в PS1). 3. Группируйте информацию: первая строка — системная, вторая — контекст (директория, ветка). 4. Используйте цвета экономно — 2–3 контрастных цвета. 5. Тестируйте в терминалах, которые вы используете (gnome-terminal, xterm, iTerm, tmux). ## Чек-листы по ролям Разработчик: - Отображать рабочую директорию и git-ветку. - Не запускать тяжёлые команды (ag, rg) в PS1. - Использовать цвет для подсветки статуса (например, красный, если есть незакоммиченные изменения). Системный администратор: - Отображать имя хоста и UID (чтобы не перепутать root/другие хосты). - Цветом выделять root (например, красный фон для корневых сессий). - Не показывать секреты и не выполнять команды, которые читают защищённые файлы. ## Тесты и критерии приёмки - PS1 корректно отображается при новом запуске bash (source ~/.bashrc). - Курсор остаётся в правильном месте при редактировании длинных строк (проверьте с длинным вводом). Если нет — проверьте[/]вокруг escape-последовательностей. - Команды, подставленные в приглашение, выполняются быстро (<50 ms) в нормальных условиях. - При входе под root приглашение показывает#. ## Решение проблем и откат - Если после правки .bashrc терминал не работает — откатите изменения через другой TTY или SSH и уберите проблемную строку. - Если курсор ведёт себя странно — убедитесь, что все цветовые последовательности окружены[и]. - Если git-ветка медленная — замените тяжёлую команду на более лёгкий вызов или используйте PROMPT_COMMAND с кэшированием. ## Когда кастомизация не подходит (контрпримеры) - На серверах с ограниченными ресурсами: частое выполнение тяжёлых подстановок в PS1 может увеличивать нагрузку. - В автоматизированных CI-средах приглашение обычно не нужно и может мешать логам. - Если вы часто подключаетесь к множеству хостов — используйте явное имя хоста и/или цвет для отличия. ## Совместимость и советы по миграции - Escape-последовательности ANSI работают в большинстве терминалов, но некоторые старые или минимальные терминалы могут поддерживать ограниченно. - Тmux, screen и ssh работают нормально, но цветовая палитра может отличаться. - Для портирования настроек между машинами скопируйте фрагменты PS1 в отдельный файл, например~/.bash_prompt, и подключайте его из.bashrc. ## Быстрая шпаргалка (cheat sheet) - Сохранить дефолтное приглашение:DEFAULT=$PS1- Вернуть дефолт:PS1=$DEFAULT- Применить изменения .bashrc:source ~/.bashrc- Вставка вывода команды: используйте обратные апострофы: ``command`` - Цветовой тег:[\033[1;31m]— жирный красный,[\033[00m]— сброс ## Decision flow — как выбрать формат приглашения ```mermaid flowchart TD A[Нужна ли дополнительная информация?] -->|Да| B{Что важнее?} A -->|Нет| C[Минимум: \u\$ ] B --> D[Контекст разработки] B --> E[Администрирование] D --> F[Добавить \w и git-ветку, цвет для статуса] E --> G[Добавить \h, цвет для root, время] F --> H[Тестирование: скорость и позиционирование курсора] G --> H H --> I[Сохранить в ~/.bashrc] ``` ## Безопасность и приватность Не включайте в PS1 вывод команд, которые могут раскрыть секреты (файлы с паролями, токены). Также избегайте динамического выполнения команд, которые читают чувствительные файлы. ## Короткое резюме Ваше приглашение Bash хранится в PS1 и настраивается либо временно в сессии, либо постоянно в~/.bashrc. Цвета добавляются через ANSI escape-последовательности, которые нужно оборачивать в[и]. Для динамической информации используйте аккуратно команды в обратных апострофах и избегайте тяжёлых вычислений. Ключевые рекомендации: - Сохраняйте исходный PS1 перед экспериментами. - Оборачивайте все нерисуемые последовательности в[и]. - Тестируйте производительность, если вставляете вызовы git или других команд. --- Ключевые выводы: - PS1 управляет приглашением; храните постоянную конфигурацию в ~/.bashrc. - ANSI escape-коды дают цвет, но требуют[/]`. - Не выполняйте тяжёлые команды в PS1. - Для сложных случаев используйте PROMPT_COMMAND и кэширование.
Похожие материалы
Автозапуск приложений в Windows 10
Установка DOS-игр на Mac с Boxer
Как поставить пароль на заметки в iOS 11
Установка и переключение среды рабочего стола в Linux
Как скрыть лайки в Instagram — пошаговая инструкция