Как изменить вид приглашения командной строки

Как изменить командную строку. Команда строка Windows (command.exe) является полезным инструментом для выполнения различных административных задач. Приглашение командной строки – это короткая фраза или символ, отображаемый на экране, чтобы...


Загрузить PDF


Загрузить PDF

Команда строка Windows (command.exe) является полезным инструментом для выполнения различных административных задач. Приглашение командной строки – это короткая фраза или символ, отображаемый на экране, чтобы информировать пользователя о готовности программы принять команду. Эта статья расскажет вам, как изменить приглашение командной строки однократно и на постоянной основе.

  1. Изображение с названием Create a Custom Windows Command Prompt Step 1

    1

    Нажмите Windows + R.

  2. Изображение с названием Create a Custom Windows Command Prompt Step 2

    2

    Введите CMD и нажмите Enter.

  3. Изображение с названием Create a Custom Windows Command Prompt Step 3

    3

    Введите prompt и новый символ/фразу приглашения.

  4. Изображение с названием Create a Custom Windows Command Prompt Step 4

    4

    Новое приглашение отобразится на следующей строке. Обратите внимание, что новое приглашение будет сброшено при закрытии окна командной строки.

    Реклама

  1. Изображение с названием Create a Custom Windows Command Prompt Step 5

    1

    Щелкните правой кнопкой мыши по «Компьютер» и в меню выберите «Свойства».

  2. Изображение с названием Create a Custom Windows Command Prompt Step 6

    2

    Нажмите «Дополнительные параметры системы».

  3. Изображение с названием Create a Custom Windows Command Prompt Step 7

    3

    Нажмите «Переменные среды».

  4. Изображение с названием Create a Custom Windows Command Prompt Step 8

    4

    Нажмите «Создать» (в разделе «Пользовательские переменные»).

  5. Изображение с названием Create a Custom Windows Command Prompt Step 9

    5

    В строке «Имя» введите prompt.

  6. Изображение с названием Create a Custom Windows Command Prompt Step 10

    6

    В строке «Значение» введите новый символ/фразу приглашения.

  7. Изображение с названием Create a Custom Windows Command Prompt Step 11

    7

    Нажмите ОК.

    Реклама

Советы

Существуют специальные последовательности символов, которые можно использовать для отображения различных переменных. Команда prompt /? выводит список этих специальных символов. Переменные среды также могут использоваться в строке приглашения, используя стандартный формат %variablename%.

По умолчанию приглашением является «$P$G», что означает «Показывать букву диска и путь ($P), за которым следует «>»($ G)», например, C:Windows>. Ниже приводится список специальных символов.

$A & (Амперсанд)
$B | (вертикальная черта)
$C ( (левая скобка)
$D Текущая дата
$E Код выхода (ASCII код 27)
$F ) (правая скобка)
$G > (знак «больше»)
$H Backspace (стирает предыдущий символ)
$L < (знак «меньше»)
$N Текущий диск
$P Текущий диск и путь
$Q = (знак «равно»)
$S (пробел)
$T Текущее время
$V Номер версии Windows
$_ Возврат каретки
$$ $ (Знак доллара)

Если включены командные расширения, командная строка поддерживает следующие дополнительные символы форматирования:
$+ Нуль или дополнительные знаки «плюс» (+) в зависимости от размера стека PUSHD (один символ для каждого уровня).
$M Отображение удаленного имени, связанного с буквой текущего диска или пустой строкой (если текущий диск не является сетевым).

Реклама

Предупреждения

  • Не вводите набор случайных символов в командной строке. Командная строка является мощным инструментом, который может внести необратимые изменения в систему или даже удалить все данные на вашем компьютере!

Реклама

Об этой статье

Эту страницу просматривали 12 613 раз.

Была ли эта статья полезной?

Приглашение ко вводу команд в bash — это строка, которая отображается слева от каждой команды, которую вы вводите в терминале. Обычно приглашение имеет вид пользователь@hostname:директория$

Bash Promt PS1

Приглашение можно настраивать. Можно добавлять информацию или, например, изменить цвет приглашения.

В какой переменной задается приглашение

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

Например, переменная PS1 может иметь значение:

PS1="u@h:w$"

Или, например, командой echo $PS1 можно вывести текущее значение переменной PS1. У меня в Ubuntu оно выглядит так:

echo $PS1
[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}[3[01;32m]u@h[3[00m]:[3[01;34m]w[3[00m]$

Не пугайтесь. На самом деле существует масса возможностей для настройки строки приглашения. Ниже мы рассмотрим базовые методы настройки.

Как изменить приглашение (только для данной сессии)

Можно установить переменную PS1 только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1, например:

export PS1="u@w:"

После выполнения команды строка приглашения в терминале сразу изменится.

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

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

Специальные символы начинаются с символа косой черты «», за которой следует буква или символ. Ниже приведена таблица специальных символов.

Обозначение Описание
a ASCII-символ bell (07)
d Дата в формате «День недели Месяц Дата» (например, «Пн Ноя 26»)
D{format} Значение format передается функции strftime. В строку приглашения подставляется результат выполнения функции. Фигурные скобки обязательны.
e ASCII-символ escape (033)
h Hostname (имя хоста) до первого символа точка «.».
H Hostname (имя хоста, компьютера).
j Количество фоновых процессов, запущенных в данной оболочке
l Базовое название оболочки.
n Переход на новую строку.
r Переход к началу строки (возврат каретки).
s Имя оболочки (имя shell).
t Текущее время в 24-часовом формате (HH:MM:SS).
T Текущее время в 12-часовом формате (HH:MM:SS).
@ Текущее время в 12-часовом am/pm формате.
A Текущее время в 24-часовом формате (HH:MM).
u Имя пользователя.
v Версия bash (например, 4.4).
V Версия bash с версией релиза (например, 4.4.19).
w Текущий абсолютный путь (полный путь). Домашняя директория сокращается до значка тильды «~».
W Текущий относительный путь. Домашняя директория сокращается до значка тильды «~».
! Номер команды в истории команд (history).
# Номер команды в текущей сессии терминала.
$ Символ приглашения (# для root, $ для обычных пользователей).
nnn Символ, соответствующий восьмеричному значению nnn.
\ Символ обратной косой черты «».
[ Начало последовательности непечатаемых символов.
] Конец последовательности.

Примеры

Пример 1

Приглашение, состоящее из одного символа «>»:

PS1=">"

Пример 2

Текущее время, пользователь, текущая директория:

PS1="A u@w$"

Пример 3

Дата, пользователь, текущая директория, номер команды:

PS1="d:u:w!>"

Как изменить цвета в строке приглашения

Элементы строки приглашения можно раскрашивать в разные цвета.

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

Используется следующий синтаксис:
e[X;YmРАСКРАШИВАЕМАЯ_СТРОКАe[m

e[ — начало цветовой схемы.
X;Ym — цветовая пара (X;Y). Именно значения X и Y определяют цвет.
e[m — окончание цветовой схемы.

Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36.

export PS1="e[0;36mu@h W$ e[m"

Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.

Список цифровых обозначений для цветов (Y):

Цвет Числовое
обозначение
Black 30
Red 31
Green 32
Brown 33
Blue 34
Purple 35
Cyan 36
Light gray 37
Dark gray 90
Light red 91
Light green 92
Light yellow 93
Light blue 94
Light magenta 95
Light cyan 96
White 97

При задании цвета двумя числами X;Y, первое число X принимает следующие значения:
0 — обычный цвет;
1 — будет использоваться более яркий цвет;
2 — более темный цвет;
3 — курсив;
4 — подчеркивание;
5 — моргание.

Примеры

Пример 1

Например, установим имя пользователя желтым цветом, а остальной текст оставим стандартным цветом (в моем случае это белый). Для указания желтого цвета используем обозначение 1;33 (как светло-коричневый).

export PS1="e[1:33mue[m@h W$ "

Пример 2

Раскрасим остальные элементы строки приглашения:

export PS1="e[1;33mue[m@e[0;96mhe[m e[0;92mWe[m$ "

Как изменить приглашение на постоянной основе

Новое значение переменной PS1 прописывается в файле .bashrc, который расположен в вашей домашней директории (файл может отсутствовать).

Откроем файл .bashrc в редакторе nano для редактирования. Для этого в терминале выполним команду:

nano ~/.bashrc

Перейдем в конец файла и добавим новую строку, в которой пропишем значение переменной PS1. Например:

PS1="u@w$"

Сохраним изменения и закроем файл. Для этого нажмите Ctrl+X, затем Y и Enter, чтобы сохранить изменения.

Теперь выполним команду source, чтобы наши изменения вступили в силу:

source ~/.bashrc

Перезапустите терминал. Приглашение для ввода команд будет обновлено.

Настройка вида приглашения командной строки в Bash

Приглашение ко вводу команд в bash — это строка, которая отображается слева от каждой команды, которую вы вводите в терминале. Обычно приглашение имеет вид пользователь@hostname:директория$

Вид приглашения командной строки Bash определяется переменной PS1. Его можно просмотреть как любую другую переменную окружения:

Как изменить приглашение (только для данной сессии)

Можно установить переменную PS1 только для текущей сессии в терминале. Это удобно, пока вы подбираете, как будет выглядеть строка приглашения. Чтобы это сделать нужно выполнить команду export для переменной PS1, например:

После выполнения команды строка приглашения в терминале сразу изменится.

Как изменить приглашение на постоянной основе

Новое значение переменной PS1 прописывается в файле .bashrc, который расположен в вашей домашней директории (файл может отсутствовать).

Откроем файл .bashrc в редакторе nano для редактирования. Для этого в терминале выполним команду:

Перейдем в конец файла и добавим новую строку, в которой пропишем значение переменной PS1. Например:

Сохраним изменения и закроем файл. Для этого нажмите Ctrl+X, затем Y и Enter, чтобы сохранить изменения.

Теперь выполним команду source, чтобы наши изменения вступили в силу:

Перезапустите терминал. Приглашение для ввода команд будет обновлено.

Как изменить цвета в строке приглашения

Элементы строки приглашения можно раскрашивать в разные цвета.

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

Используется следующий синтаксис:

e[X;YmРАСКРАШИВАЕМАЯ_СТРОКАe[m

e[ — начало цветовой схемы.
X;Ym — цветовая пара (X;Y). Именно значения X и Y определяют цвет.
e[m — окончание цветовой схемы.

Небольшой пример, чтобы вы понимали о чем идет речь. Раскрасим всю строку целиком цветом с обозначением 0;36.

export PS1="e[0;36mu@h W$ e[m"

Цвета задаются числами. Можно задавать парой X;Y или просто Y. Например, красный это — 0;31 или просто 31. Есть и другие способы задания цветов, но в данной статье мы их не рассматриваем.

Список цифровых обозначений для цветов (Y):

Цвет Числовое обозначение
Black 30
Red 31
Green 32
Brown 33
Blue 34
Purple 35
Cyan 36
Light gray 37
Dark gray 90
Light red 91
Light green 92
Light yellow 93
Light blue 94
Light magenta 95
Light cyan 96
White 97

При задании цвета двумя числами X;Y, первое число X принимает следующие значения:

0 — обычный цвет;
1 — будет использоваться более яркий цвет;
2 — более темный цвет;
3 — курсив;
4 — подчеркивание;
5 — моргание.

Примеры

Простой вывод текущего пользователя и полного пути:

Такойже вывод, но с подстветкой:

PS1="[e]0;u@h: wa]${debian_chroot:+($debian_chroot)}[33[01;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$ "

Список возможных настроек приглашения

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

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

Обозначение Описание
a ASCII-символ bell (07)
d Дата в формате «День недели Месяц Дата» (например, «Пн Ноя 26»)
D{format} Значение format передается функции strftime.
В строку приглашения подставляется результат выполнения функции. Фигурные скобки обязательны.
e ASCII-символ escape (033)
h Hostname (имя хоста) до первого символа точка ..
H Hostname (имя хоста, компьютера).
j Количество фоновых процессов, запущенных в данной оболочке
l Базовое название оболочки.
n Переход на новую строку.
r Переход к началу строки (возврат каретки).
s Имя оболочки (имя shell).
t Текущее время в 24-часовом формате (HH:MM:SS).
T Текущее время в 12-часовом формате (HH:MM:SS).
@ Текущее время в 12-часовом am/pm формате.
A Текущее время в 24-часовом формате (HH:MM).
u Имя пользователя.
v Версия bash (например, 4.4).
V Версия bash с версией релиза (например, 4.4.19).
w Текущий абсолютный путь (полный путь). Домашняя директория сокращается до значка тильды ~.
W Текущий относительный путь. Домашняя директория сокращается до значка тильды ~.
! Номер команды в истории команд (history).
# Номер команды в текущей сессии терминала.
$ Символ приглашения (# для root, $ для обычных пользователей).
nnn Символ, соответствующий восьмеричному значению nnn.
\ Символ обратной косой черты .
[ Начало последовательности непечатаемых символов.
] Конец последовательности.

Командная строка

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

Вы можете изменить вид приглашения для командной строки. Как правило используется формат типа C:> (текущий диск и угловая скобка). Откройте раздел

HKLMSYSTEMCurrentControlSetControlSession ManagerEnvironment

и создайте параметр PROMPT типа REG_EXPAND_SZ, которому нужно присвоить одно из следующих значений:

  • $B — | (вертикальная черта)
  • $D — текущая дата
  • $G — > (знак больше)
  • $L — < (знак меньше)
  • $N — текущий диск
  • $P — текущий диск и путь
  • $Q — = (знак равно)
  • $T — текущее время
  • $V — версия Windows
  • $$ — $ (знак доллара)

Запрет на расширенный режим командного процессора CMD.EXE

Существует возможность запрета на расширенный режим командного процессора (cmd.exe). Например, в расширенном режиме существуют такие команды как del, erase, chdir, goto. Для запрета найдите или создайте параметр типа DWORD EnableExtensions в разделе

HKCUSoftwareMicrosoftCommand Processor

и присвойте ему значение 0. Для включения этого режима используйте значение 1

Отложенное расширение переменных среды

Отложенное расширение переменных среды по умолчанию не включено. Для включения используйте параметр типа DWORD DelayedExpansion, равный 1 в разделе

HKCUSoftwareMicrosoftCommand Processor

Запрет на режим командной строки и обработки bat-файлов

Существует возможность запрета на режим командной строки (cmd.exe) и обработки bat-файлов. Для этого найдите или создайте параметр типа DWORD DisableCMD в разделе

HKCUSoftwarePoliciesMicrosoftWindowsSystem

Автонабор команд

Для включения возможности автонабора команд по нажатию клавиши Tab, в разделе

HKCUSoftwareMicrosoftCommand Processor

установите значение параметра типа DWORD CompletionChar равным 9, что соответствует идентификатору клавиши Tab. Для клавиши Backspace используйте 8, для клавиш Ctrl-D — 4, для Ctrl-F — 6

Откуда запускать командную строку

По умолчанию консоль cmd.exe стартует в папке профиля пользователя, но этот порядок вполне можно изменить. Для этого надо в разделе

HKCUSoftwareMicrosoftCommand Processor

создать строковый параметр AutoRun с указанием в его значении команды перехода к необходимой директории — например, — CD /D C: — именно в ней и будет стартовать консоль. Кстати говоря, в значении этого параметра можно указать и специально заготовленный bat-файл с разными командами, с параметрами переменных окружения и т. п. Получится что-то вроде autoexec.bat для консоли, да и редактировать такой файл удобнее, чем параметры в реестре.

Быстрый запуск командной строки из контекстного меню

Если вы часто пользуетесь командной строкой, то возможно вам будет гораздо удобнее поместить вызов этой команды в контекстное меню папки в Проводнике. Для этого добавьте в раздел

HKCRDirectoryShell

новый подраздел Командная строка. Затем в созданном подразделе создайте новый подраздел Command и присвойте параметру по умолчанию данного подраздела значение cmd.exe /k «%1». Теперь, щелкнув правой кнопкой мыши на любой папке в Проводнике, вы можете выбрать пункт Командная строка, которая запустить командный процессор в этой папке.

Состояние перевода: На этой странице представлен перевод статьи Bash/Prompt customization. Дата последней синхронизации: 10 июля 2021. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

Приглашения

Bash имеет четыре строки приглашения, каждая из которых может быть настроена.

  • PS1 — основное приглашение, которое отображается перед каждой командой; по этой причине модифицируется чаще всего.
  • PS2 — второе приглашение, отображается, если команде требуются дополнительные данные для ввода (например, в случае многострочных команд).
  • PS3 — используется довольно редко. Отображается при работе встроенной команды Bash select, выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает escape-последовательности Bash. Обычно все изменения применяются непосредственно в скрипте, содержащем select, а не в файле .bashrc.
  • PS4 — также используется редко. При отладке скриптов показывает уровни вложенности — первый символ приглашения повторяется столько раз, сколько на данный момент задействовано уровней.

Настройка конкретного приглашения подразумевает присваивание (обычно в файле ~/.bashrc) необходимой строки в переменную, например:

PS2='> '

Техники

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

Escape-последовательности Bash

При выводе строки приглашения Bash ищет экранированные символом слэша символы (escape-последовательности) и конвертирует их в специальные строки. Например, u превратится в имя пользователя, а A — в текущее время. Таким образом, если переменной PS1 присвоить 'A u $ ', то приглашение будет выглядеть как 17:35 пользователь $ .

Полный список escape-последовательностей можно найти в руководстве bash(1) § PROMPTING и в справочнике Bash.

Escape-последовательности terminfo

Помимо escape-последовательностей, которые понимает Bash, большинство терминалов также распознают специальные последовательности, которые влияют на терминал сам по себе, а не на печатаемые символы. Например, так можно изменить цвет строки символов, сдвинуть курсор в произвольную позицию или очистить экран. Эти последовательности могут быть довольно неудобными и варьируются от терминала к терминалу, поэтому они задокументированы в базе данных terminfo. Чтобы увидеть, какие свойства поддерживает ваш терминал, выполните:

$ infocmp

Значение свойств можно найти в terminfo(5) по их названиям (часть перед =). Например, свойство setaf настраивает цвет шрифта для всего текста, который будет напечатан после него. Узнать escape-код свойства можно командой tput. Например,

$ tput setaf 2

выведет escape-последовательности для настройки зелёного цвета шрифта.

Примечание: Если команда tput не работает, убедитесь, что значение TERM имеет верное значение для вашего терминала. Например, если установлено значение xterm вместо xterm-256color, то tput setaf будет работать только с номерами цветов 0-7.

На практике, чтобы использовать эти возможности в приглашении командной строки, можно использовать подстановку команд Bash и интерполяцию строк. Например:

GREEN="[$(tput setaf 2)]"
RESET="[$(tput sgr0)]"

PS1="${GREEN}my prompt${RESET}> "

my prompt>

Примечание: Руководство Bash рекомендует «обернуть» вывод tput в [ ]. Это поможет Bash правильно учитывать непечатаемые символы при вычислении длины приглашения. При подстановке команд это не работает, поэтому используйте значения 1 2.

Escape-последовательности ANSI

К сожалению, ANSI-последовательности могут отсутствовать в базе terminfo вашего терминала. Чаще всего это касается последовательностей для новейших возможностей вроде поддержки 256 цветов. В этом случае использовать tput не получится и придётся вводить escape-последовательности вручную.

Примеры escape-последовательностей можно найти в статье Управляющие последовательности ANSI. Каждая последовательность начинается с литерала escape-последовательности, которую вы можете ввести с помощью escape-последовательности Bash e. Например, e[48;5;209m задаст персиковый цвет фона (если есть поддержка 256 цветов), а e[2;2H сдвинет курсор в левый верхний угол экрана.

В случаях, когда escape-последовательности Bash не поддерживаются (как в приглашении PS3), их можно добавить командой printf:

ESC=$(printf "e")
PEACH="$ESC[48;5;209m"

Встроенные команды

Если вы хотите добавить вывод какой-нибудь команды в приглашение, то используйте подстановку команд (command substitution). Например, чтобы добавить величину свободной памяти к приглашению попробуйте что-то вроде:

PS1="$(awk '/MemFree/{print $2}' /proc/meminfo) prompt > "
53718 prompt >
53718 prompt >
53718 prompt >

Как видно, это работает не совсем корректно — значение памяти всегда одно и то же! Причина — команда выполняется только один раз при первой настройке PS1. Необходимо предотвратить подстановку либо экранированием символа $, либо определением строки в одиночных кавычках — в обоих случаях подстановка будет производиться каждый раз при настоящем отображении приглашения:

PS1="$(awk '/MemFree/{print $2}' /proc/meminfo) prompt > "
# или
PS1='$(awk "/MemFree/{print $2}" /proc/meminfo) prompt > '

Если команды сделали приглашение слишком длинным, для лучшей читабельности можно вынести их в функцию:

free_mem()
{
    awk '/MemFree/{print $2}' /proc/meminfo
}

PS1='$(free_mem) prompt > '

Примечание: В подстановочных функциях можно использовать escape-последовательности terminfo/ANSI, но не последовательности Bash. В частности, [ ] не будет работать при обрамлении ими строки с непечатаемыми символами. Вместо этого используйте восьмеричные экранированные последовательности 01 и 02 (например, в командах printf или echo -e).

PROMPT_COMMAND

Переменной PROMPT_COMMAND можно присвоить произвольную команду, которая будет выполняться непосредственно перед выводом PS1. Это позволяет создавать довольно мощные эффекты. Например, можно переназначить PS1 на основе некоторых условий, или выполнить какие-то действия с историей Bash при выполнении любой команды.

Важно: PROMPT_COMMAND не должна использоваться для вывода символов непосредственно в приглашение. Символы, напечатанные вне PS1, не учитываются Bash, что может привести к неправильному позиционированию курсора и обычных символов. Либо используйте PROMPT_COMMAND для задания PS1, либо изучите рекомендации в разделе #Встроенные команды.

Совет: Если PROMPT_COMMAND стала слишком сложной, bash-preexec (реализация хук-функций preexec и precmd Zsh для Bash) может упростить работу с ней.

Escape-последовательности между вводом и выводом

Свойства вводимого текста можно изменить, «забыв» отключить свойства в конце PS1. Например, если вставить tput blink в конец PS1, то вводимые команды будут мерцать. Тем не менее, этот эффект также перейдёт и на вывод команды, поскольку свойства не отключаются при нажатии Enter.

Чтобы вставить escape-последовательность после ввода, но перед началом вывода, можно перехватить (trap) Bash-сигнал DEBUG, который посылается перед выполнением каждой команды:

$ trap 'tput sgr0' DEBUG

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

Для удобства можно сделать приглашение командной строки root-пользователя визуально отличным от обычного (возможно, мерцающий красный цвет?). Настройка приглашения производится как обычно, но в домашнем каталоге суперпользователя, /root. Начните с копирования шаблонов /etc/skel/.bash_profile и /etc/skel/.bashrc в каталог /root, после чего внесите в файл /root/.bashrc необходимые изменения.

Примеры

Цвета

Совет: Вывод infocmp содержит доступное для tput количество цветов, например — colors#8.

Увидеть все цвета вашего терминала можно с помощью простого цикла (замените setab на setaf, если нужен цвет текста, а не фона):

for C in {0..255}; do
    tput setab $C
    echo -n "$C "
done
tput sgr0
echo

Если это не работает (причём установлено правильное значение TERM), протестируйте вручную разные последовательности:

# стандартные цвета
for C in {40..47}; do
    echo -en "e[${C}m$C "
done
# цвета высокой интенсивности
for C in {100..107}; do
    echo -en "e[${C}m$C "
done
# 256 цветов
for C in {16..255}; do
    echo -en "e[48;5;${C}m$C "
done
echo -e "e(Be[m"

Аналогичные значения для текста (не фона): стандартные — 30..37, высокая интенсивность — 90..97, а для 256 цветов замените 48 на 38.

Основные свойства

Следующие свойства terminfo будут полезны при настройке приглашения и поддерживаются во многих терминалах. #1 и #2 необходимо заменить на числовые аргументы.

Свойство Escape-последовательность Описание
Свойства текста
blink E[5m мерцающий тект вкл
bold E[1m полужирный текст вкл
dim E[2m тусклый текст вкл
rev E[7m обратное отображение вкл (текст/фон меняются цветами)
sitm E[3m курсив вкл
ritm E[23m курсив выкл
smso E[7m выделение текста вкл
rmso E[27m выделение текста выкл
smul E[4m подчёркивание вкл
rmul E[24m подчёркивание выкл
setab #1 E[4#1m задать цвет фона #1 (0-7)
setaf #1 E[3#1m задать цвет текста #1 (0-7)
sgr0 E(BE[m отключить все атрибуты текста
Перемещение курсора
sc E7 сохранить позицию курсора
rc E8 вернуть курсор в сохранённую позицию
clear E[HE[2J очистить экран и переместить курсор в левый верхний угол
cuu #1 E[#1A переместить курсор вверх на #1 строк
cud #1 E[#1B переместить курсор вниз #1 строк
cuf #1 E[#1C переместить курсор вправо #1 столбцов
cub #1 E[#1D переместить курсор влево #1 столбцов
home E[H переместить курсор в левый верхний угол окна
hpa #1 E[#1G переместить курсор в столбец #1
vpa #1 E[#1d переместить курсор в строку #1, первый столбец
cup #1 #2 E[#1;#2H переместить курсор в строку #1, столбец #2
Удаление символов
dch #1 E#1P удалить #1 символов (аналогично нажатию клавиши backspace)
dl #1 E#1M удалить #1 строк
ech #1 E#1X стереть #1 символов (без перемещения курсора)
ed E[J очистить до нижнего края экрана
el E[K очистить до конца строки
el1 E[1K очистить до начала строки

Отображение кода выхода

Тем же приёмом, как в случае встроенных команд, можно отложить интерполяцию специальной переменной Bash вроде $?. Следующие приглашения будут содержать код выхода предыдущей команды:

PS1="$? > "
# или
PS1='$? > '

0 > true
0 > false
1 >

Это можно сделать с помощью условных выражений и функций:

exitstatus()
{
    if [[ $? == 0 ]]; then
        echo ':)'
    else
        echo 'D:'
    fi
}
PS1='$(exitstatus) > '

:) > true
:) > false
D: >

Позиционирование курсора

Курсор можно перемещать по экрану во время нахождения «внутри» приглашения PS1, чтобы разные части приглашения появлялись в разных местах. Важный момент — после всех перемещений и вывода символов в любых местах экрана курсор необходимо вернуть в исходную позицию. Это можно сделать с помощью свойств sc и rc, которые сохраняют и восстанавливают позицию курсора соответственно. Общая схема приглашения, содержащего перемещения курсора:

PS1="[$(tput sc; перемещение курсора) работа с курсором $(tput rc)] работа с курсором после возврата"

Весь блок с перемещениями курсора обёрнут в [ ], чтобы Bash не учитывал непечатаемые символы как часть приглашения.

Выравнивание по правому краю

Простейший способ напечатать текст у правого края экрана — использовать printf:

rightprompt()
{
    printf "%*s" $COLUMNS "right prompt"
}

PS1='[$(tput sc; rightprompt; tput rc)]left prompt > '

left prompt > right prompt

Здесь задано поле %*s переменной длины с выравниванием по правому краю. Размер поля равен текущему количеству столбцов в терминале ($COLUMNS).

Произвольное позиционирование

Свойство cup перемещает курсор в конкретную позицию экрана, например, tput cup 20 5 переместит курсор на строку 20, столбец 5 (координаты 0 0 обозначают верхний левый угол). cuu, cud, cuf и cub (вверх, вниз, вперёд, назад) перемещают курсор относительно текущей позиции. Например, tput cuf 10 переместит курсор на 10 символов вправо. В аргументах можно использовать переменные LINES и COLUMNS, если требуется переместить курсор относительно нижнего и правого краёв окна. Например, перемещение на 10 строк и 5 столбцов от правого нижнего угла:

$ tput cup $((LINES - 11)) $((COLUMNS - 6))

Настройка названия окна терминала

Название окна терминала можно настроить так же, как и приглашение: выводом escape-последовательностей в оболочке. Часто пользователи встраивают настройки названия окна в своё приглашение. Технически это возможность xterm, но и другие современные терминалы её поддерживают. В этом случае используют последовательности ESC]2;новое названиеBEL, где ESC и BEL — символы escape (выход) и bell (сигнал). С последовательностями Bash приглашение с встроенным названием окна будет иметь вид:

PS1='[e]2;новое названиеa]prompt > '

Само собой, строка названия окна может включать вывод встроенных команд или переменные вроде $PWD, так что она может перенастраиваться после каждой команды.

Смотрите также

  • Примеры и скриншоты на теме форума: What’s your PS1? (доступно только после входа)
  • Файл /etc/bash/bashrc для Gentoo; см. также gentoo-bashrcAUR
  • tput(1)
    • Справка по tput на сайте bash-hackers.org
    • Цвета и перемещение курсора с tput
  • Приглашение Bash HOWTO
  • Коллекция примеров приглашений от Giles Orr
  • Советы Bash: цвета и форматирование
  • Liquid Prompt — полезное адаптивное приглашение для Bash & zsh
  • Bash POWER PROMPT
  • Wikipedia:ru:Управляющие последовательности ANSI
  • Руководство GNU Bash: управление приглашением

Понравилась статья? Поделить с друзьями:
  • Как изменить вид разрешенного использования земельного участка через госуслуги
  • Как изменить вид права на земельный участок
  • Как изменить вид разрешенного использования земельного участка сельскохозяйственного назначения
  • Как изменить вид почты яндекс на классический
  • Как изменить вид почты майл на классический