Настройка строки приглашения bash

Опубликовано: 22 февраля 2013 в 10:30
Время на прочтение: 4 минут(ы)

Стал все чаще и чаще в своей работе встречать разные *nix системы, по этому нужно как то облагородить наше рабочие пространство.

За строку приглашения отвечают такие переменные среды, как PS1, PS2, PS3, PS4 и PROMPT_COMMAND.

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

Значение каждой переменной можно узнать, введя в терминале:

Изменить значение переменной можно двумя способами.

Способ первый — указать значение непосредственно в терминале с помощью команды export:

Переменная PS1

К примеру, указать значение переменной PS1:

Способ второй — с помощью редактора дописать в .bashrc требуемые значения:

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

К примеру, следующая последовательность \$ заставляет Bash отображать знак доллара ($), когда пользователь является обычным пользователем системы, но заменяет знак доллара решеткой (#), когда пользователь является суперпользователем (root).

Каждая специальная последовательность начинается с обратной косой черты (backslash) — «\».

К примеру, последовательность \u указывает, что надо отобразить имя пользователя, \h — имя хоста, \w — текущую папку.

Наиболее популярны следующие управляющие последовательности:

С помощью специальных непечатаемых последовательностей можно изменить цвет приглашения командной строки, что выделит его из обычного текста. Чтобы показать, что вводится значение цвета, необходимо ввести управляющую ASCII-последовательность \e (или восьмеричный ASCII-кодом \033 ).

Одна из проблем, которая возникает при использовании не печатных последовательностей, заключается в том, что Bash вычисляет количество символов в приглашении командной строки и использует это число для размещения текста в терминальном окне. Так как коды цветов не выводятся на экран, то они мешают корректному подсчету. Чтобы предотвратить подсчет непечатаемых символов, управляющие последовательности необходимо заключать в управляющие скобки \[ и \].

Изменению в командной строке поддается не только текст, но и фон, поэтому формат цвета можно указать двумя способами — для фона и цвета текста или только для текста.

Формат последовательности для фона и цвета :

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

Где X — специальный номер свойства цвета, а YY — специальный номер цвета. Свойством цвета может быть, например, повышенная или пониженная яркость. В формате для фона и цвета в начале указывается фон, а после цвет самого текста.

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

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

Переменная PS2

Вторичная строка приглашения появляется, к примеру, когда ввод команды в первичном приглашении переносится на следующую строку. Сообщить командному интерпретатору о том, что ввод продолжается в следующей строке, можно, введя обратную косую черту «\» в конце строки и введя Enter. По умолчанию отображается как «>». Формат этой переменной идентичен формату переменной PS1.

Переменная PS3

Этот вид приглашения используется в скриптах, когда нужно сделать выбор при использовании оператора select. Простой наглядный пример bash-скрипта и его вывод:

Переменная PS4

Приглашение четвертого уровня PS4 так же используется в скриптах. К примеру ключ -v заставляет выводить на экран терминала каждую команду прежде, чем она будет исполнена. Ключом -x подобно ключу -v, но выполняет подстановку команд и перед каждой командой выведет четверичное приглашение.

PROMPT_COMMAND

С помощью этой переменной можно задать выполнение определённых команд перед каждым первичным приглашением. В основном, она используется, когда нужно расширить возможности первичного приглашения, вызывая какую-то дополнительную функцию или команду или даже целый скрипт. К примеру, я хочу, чтобы перед каждым первичным приглашением происходил вывод текущего каталога и календаря на месяц:

Мой .bashrc

Источник: Строка приглашения в Bash

Поделиться