Изменение приглашения терминала в bash

Приглашение в командной среде bash изменяется при помощи изменения переменных PS1, PS2, PS3, PS4 и PROMPT_COMMAND.

  • PS1 — переменная, которая задает вид строки приглашения командной строки, которое bash выводит, когда ожидает ввода очередной команды пользователем.
  • PS2 — переменная, отвечающая за вторичный тип приглашения ввода.
  • PS3 — третичное приглашение, выводится тогда, когда пользователь должен сделать выбор в операторе select.
  • PS4 — приглашение четвертого уровня, выводится при отладки сценариев (скриптов) в начале каждой строки перед командой перед исполняющейся командой.
  • PROMPT_COMMAND — содержимое этой переменной выполняется перед каждой строкой приглашения.

Для того чтобы узнать текущие значения этих переменных можно воспользоваться командой echo.

echo $PS1

Вывод будет примерно следующим:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

Для изменения переменной можно пользоваться командой export. Например:

export PS1='\u@\w : '

Изменит приглашение на такое:

user@~ :

Другим методом изменения данных переменных является задание из в конце файла ~/.bashrc. Это делается таким образом:

PS1 = "\u@\w : "

Задание параметров приглашения командной оболочки производится при помощи задания управляющих последовательностей:

  • \d — Дата в формате «День, месяц, число», например, Срд, Окт, 17.
  • \h — Имя хоста (hostname) до первой точки
  • \H — Полное имя хоста
  • \t — Текущее время в 24-часовом формате: HH:MM:SS (часы:минуты:секунды)
  • \T — Текущее время в 12-часовом формате: HH:MM:SS
  • \@ — Текущее время в 12-часовом формате am/pm
  • \u — Имя пользователя, запустившего оболочку
  • \w — Полное имя текущего рабочего каталога (начиная с корня)
  • \W — Текущий рабочий каталог (без указания пути)
  • \$ — Символ #, если оболочка запущена суперпользователем, и символ $, если оболочка запущена обычным пользователем.
  • \n — Новая строка (перевод строки)
  • \s — Имя оболочки
  • \# — Текущий номер команды
  • \! — Порядковый номер данной команды в истории команд
  • \\ — Обратный слэш (a backslash)
  • \nnn — Непечатный символ, имеющий восьмеричный код nnn (к примеру esc)
  • \a — Звуковой сигнал (ASCII-код 007)
  • \e — escape (ASCII-код 033)
  • \[ — Начало последовательности не печатаемых символов (этот символ может быть использован для того, чтобы включить в текст подсказки последовательность управляющих символов терминала)
  • \] — Конец последовательности не печатаемых символов

Изменение цвета строки приглашения:
Изменение цвета строки приглашения командной оболочки делается при помощи последовательности

\[\е[#;##m\]
  • # — номер свойства цвета
  • ## — номер цвета

Номера свойств текста:

Свойство Код
Значение по умолчанию 0
Повышенная яркость 1
Пониженная яркость 2
Подчеркнутый 4
Нормальная яркость 5
Инвертированный 7
Скрытый 8

Номера цветов:

Цвет Текст Фон
Черный 30 40
Красный 31 41
Зеленый 32 42
Желтый 33 43
Синий 34 44
Фиолетовый 35 45
Голубой 36 46
Белый 37 47

Например такая последовательность:

\[\e[1;37m\] \u: \[\e[0;37m\]

Настроит строку приглашения следующим образом:

Как видно из примера управляющая последовательность изменяет свойства всего текста после неё и до другой последовательности.
Таким же образом устанавливается цвет фона и текста, но параметры дублированы. Первые два для фона, вторые — для текста:

\[\е[#;##;#;##m\]

Переменная PS2:
Содержимое переменной PS2 появляется на экране терминала при переносе ввода команды на следующую строку. Например:

Метод изменения переменных одинаков, не будем останавливаться на каждой отдельно.
Переменная PS3: Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select.
Переменная PROMPT_COMMAND: Эта переменная используется для помещения какого либо выражения перед каждой строкой приглашения терминала:
Например если поместить в неё команду ls:

export PROMPT_COMMAND='ls'

То перед каждой строкой приглашения выведется список файлов текущей папки:

Для более подробной информации вы можете воспользоваться справочным руководством:

man bash

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. Гость

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

    Ответить
    1. lamazavr

      нужно прописать их в файле ~/.bashrc

      Ответить
  2. Дмитрий

    А как сделать для всех новых пользователей? То есть тех, которые ещё не созданы и у кого нет домашнего каталога.

    Ответить
    1. lamazavr

      говорят многие дистрибутивы хранят стандартный файл /etc/skel/.bashrc

      Ответить
  3. Alexander

    Добрый день. Если я не ошибаюсь, то в табличке «Номера свойств текста:»

    Свойство Код
    Значение по умолчанию 0
    Повышенная яркость 1
    Пониженная яркость 2
    Подчеркнутый 4
    Нормальная яркость 5 <= Мерцание, а не "Нормальная яркость"
    Инвертированный 7
    Скрытый 8

    Я не придираюсь, но истина дороже.
    А так — все по делу.
    Респект

    Ответить