Гид по технологиям

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

4 min read Linux Обновлено 23 Dec 2025
Настройка Bash-приглашения: цвета и примеры
Настройка Bash-приглашения: цвета и примеры

Изображение: пример стандартного приглашения Bash с username@hostname:directory

Быстрые ссылки

  • Где хранится переменная 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\$

Изображение: секция PS1 в .bashrc, показывающая шаблон с u и h

Эта строка включает кусок ${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 позволяет быстро вернуться.

Изображение: пример временного изменения PS1 в интерактивной сессии

Вы можете добавлять любые символы или текст. Например, чтобы добавить префикс “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$ " ``` ![Изображение: пример приглашения с выводом uptime и информации о системе](/files/02085a79-f3b2-4069-b4f2-e5f23fd8ca12.png) Используйте эту возможность аккуратно: команды в приглашении выполняются каждый раз, когда выводится приглашение, поэтому тяжёлые или медленные вызовы замедлят каждую команду в интерактивной сессии. ## Как добавить цвета в приглашение 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 ``` ![Изображение: редактирование .bashrc и сохранение нового PS1](/files/526f607e-b3e3-4be5-8f51-69ab3c53e541.png) Если приглашение сломалось и вы не можете открыть терминал, откройте TTY (Ctrl+Alt+F3) или подключитесь по SSH и откатите изменения. ![Изображение: пример финального цветного приглашения в терминале](/files/29c16a7a-07b3-48f2-82d4-51f262dcd47d.png) ## Практические примеры 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 и кэширование.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Автозапуск приложений в Windows 10
Windows 10

Автозапуск приложений в Windows 10

Установка DOS-игр на Mac с Boxer
Руководство

Установка DOS-игр на Mac с Boxer

Как поставить пароль на заметки в iOS 11
iOS безопасность

Как поставить пароль на заметки в iOS 11

Установка и переключение среды рабочего стола в Linux
Linux

Установка и переключение среды рабочего стола в Linux

Как скрыть лайки в Instagram — пошаговая инструкция
Социальные сети

Как скрыть лайки в Instagram — пошаговая инструкция

Подготовка дома к 5G‑Wi‑Fi — проверка и советы
Интернет

Подготовка дома к 5G‑Wi‑Fi — проверка и советы