Загрузить PDF
Загрузить PDF
Команда строка Windows (command.exe) является полезным инструментом для выполнения различных административных задач. Приглашение командной строки – это короткая фраза или символ, отображаемый на экране, чтобы информировать пользователя о готовности программы принять команду. Эта статья расскажет вам, как изменить приглашение командной строки однократно и на постоянной основе.
-
1
Нажмите Windows + R.
-
2
Введите CMD и нажмите Enter.
-
3
Введите prompt и новый символ/фразу приглашения.
-
4
Новое приглашение отобразится на следующей строке. Обратите внимание, что новое приглашение будет сброшено при закрытии окна командной строки.
Реклама
-
1
Щелкните правой кнопкой мыши по «Компьютер» и в меню выберите «Свойства».
-
2
Нажмите «Дополнительные параметры системы».
-
3
Нажмите «Переменные среды».
-
4
Нажмите «Создать» (в разделе «Пользовательские переменные»).
-
5
В строке «Имя» введите prompt.
-
6
В строке «Значение» введите новый символ/фразу приглашения.
-
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:директория$
Приглашение можно настраивать. Можно добавлять информацию или, например, изменить цвет приглашения.
В какой переменной задается приглашение
Формат строки приглашения задается в переменной окружения 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
— используется довольно редко. Отображается при работе встроенной команды Bashselect
, выводящей интерактивное меню. В отличие от остальных приглашений, не раскрывает 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: управление приглашением