Я нашел много escape-последовательностей в Bash, начиная с того \033]
, что это за последовательности и с чего они начинаются \033]
?
Строка на самом деле, \033[
и это еще не все.
После этой открывающей скобки появляется серия цифр и символов. Эта строка называется escape-последовательностью и используется, помимо прочего, для управления курсором консоли и цветом текста.
непечатные escape-последовательности должны быть заключены в
\[\033[ and \]
Если escape-последовательность контролирует цвет текста, за ней будет следовать m
.
Вот таблица для цветовых последовательностей:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Итак, если вы хотите, чтобы ваша консольная подсказка была синей, вы должны использовать следующую escape-последовательность (в названии файла, которое я забыл):
\[\033[34m\]
(Обратите внимание m
)
Однако эта escape-последовательность не только контролирует цвет. Он также может управлять движением курсора. Вот таблица / список с кодами движения и как они работают:
Поместите курсор:
\033[<L>;<C>H
Или
\033[<L>;<C>f
помещает курсор в строку L и столбец C.
Переместите курсор вверх на N строк:
\033[<N>A
Переместите курсор вниз на N строк:
\033[<N>B
Переместите курсор вперед на N столбцов:
\033[<N>C
Переместить курсор назад на N столбцов:
\033[<N>D
Очистите экран, перейдите к (0,0):
\033[2J
Стереть до конца строки:
\033[K
Сохранить позицию курсора:
\033[s
Восстановить позицию курсора:
\033[u
Просто имейте в виду, что последние два могут не работать в эмуляторе терминала, который вы используете. Видимо, только xterm
и nxterm
используйте эти две последовательности.
И пример использования одной из этих escape-последовательностей: скажем, я хочу поместить курсор в строку 3, столбец (символ) 9. Для этого я бы использовал
\[033\[3;9H]
(Я предполагаю, что столбец 0 является первой позицией, так что это будет 8-й символ).
Источник: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (также читайте 6.2)
Более общее чтение: http://ascii-table.com/ansi-escape-septions.php
[2K
стирает всю строку как до, так и после курсора. Гораздо лучшим источником была бы статья в Википедии, или вы могли бы перейти непосредственно к ECMA-48 , раздел 8.3.117 SGR - Выбор графического представления .0;
в цветовых последовательностях не является необходимым. Это просто делает цвет фона по умолчанию перед установкой переднего плана. Вы также можете установить фон с помощью4x
.Это управляющие команды для терминала.
Терминалы изначально были довольно тупыми устройствами, подключенными к последовательному порту, а не тем модным программным обеспечением с несколькими вкладками, которое у нас теперь есть. Поскольку они получали только поток символов (байтов), не было четкого разделения между данными (что печатать на экране) и командами (как их печатать). Вместо этого команды представлены специальными управляющими символами.
Очевидными управляющими символами являются такие вещи, как перевод строки (
ESC
новая строка), возврат на одну позицию и звуковой сигнал, но более конкретные команды задаются в виде последовательности символов, начиная с символа (код 27 в десятичном виде, 0x1b в шестнадцатеричном или 033 восьмеричного). Это часто представляется как^[
или\033
как в вашем примере.Последовательность
ESC [
называется CSI, или вводителем управляющей последовательности, и она запускает команду с необязательными числовыми параметрами, заканчивающимися обычно буквой, определяющей основную команду. Большинство общих escape-последовательностей попадают в этот класс.Списки управляющих кодов можно найти, например, на
console_codes(4)
странице руководства и на странице Википедии для управляющих кодов ANSI .Несколько примеров:
Вы можете проверить команды, например, с помощью Bash. Используя
-e
флаг, встроеннаяecho
команда принимает\033
в качестве представленияESC
символа.Например, это напечатает приветствие в цвете в середине экрана, а другое обычно в исходной позиции курсора:
Упомянутая
ESC ]
вами последовательность - это OSC или команда операционной системы, которая в основном используется в команде для установки заголовка окнаxterm
и других, например:Кроме того, есть также
ESC ( A
(и другие буквы), которые устанавливают наборы национальных символов на некоторых терминалах, что может привести к веселому эффекту .источник
Клавиша Escape, за которой следует правая квадратная скобка escape
]
, используется для ввода команды операционной системы (OSC
).Он находится в ECMA-48 , и вы можете прочитать сводку управляющих последовательностей, используемых xterm в управляющих последовательностях XTerm , например, для изменения заголовка окна терминала.
Escape-последовательности могут начинаться с разных символов. C1 (8-бит) управления Символами раздела в XTERM управления последовательностями упоминает несколько из них:
CSI
(которые вы видите , как escape[
,APC
,DCS
,PM
. Причина разного (второй) характер, потому что пара (побег и]
) связана с однобайтовый управляющий символ, используемый для различных типов escape-последовательности.Если вы прочитаете спецификацию, вы заметите, что
CSI
она используется для элементов управления с числовыми параметрами, в то время какOSC
допускаются строки. Помимо только синтаксиса, комитет, который создал этот стандарт, имел в виду использованиеAPC
иPM
отличался отDCS
иOSC
.источник
Они называются управляющими кодами ANSI и перечислены в справочной странице для console_codes . Они не являются специфичными для Bash, а работают в любом консольном приложении, пока терминал поддерживает их (большинство эмуляторов терминала поддерживают).
источник
«Экранирующие последовательности», описанные в других ответах, зависят от того, какой тип терминала у вас есть (чаще всего «ANSI» или производные / похожие).
Если вы хотите написать сценарии, которые (в некоторой степени) НЕЗАВИСИМЫ от термина, но по-прежнему используют, например, цвет и другие специальные функции, ознакомьтесь с содержанием
man terminfo
.например
будет печататься
.test.
сtest
желтоватым фоном и красным цветом переднего плана, и это будет работать для ЛЮБОГО терминала, который фактически способен использовать цвета таким же образом.Чтобы увидеть, что на самом деле напечатано, направьте это
od -t x1z
как... где значения отображаются в шестнадцатеричном формате (из-за "х").
источник