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

Опубликовано lamazavr - чт, 11/22/2012 - 14:10
Body

Приглашение в командной среде 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
Категория

Комментарии

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

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

Спасибо, наконец настроил строку приветствия, чтобы выделялась, когда скроллю код и ищу её. Мало того, добавил время выполнения команды благодаря статье. Кустомизация

Добавить комментарий

Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.