Ответы:
Строка на самом деле, \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 .
Несколько примеров:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Вы можете проверить команды, например, с помощью Bash. Используя -e
флаг, встроенная echo
команда принимает \033
в качестве представления ESC
символа.
Например, это напечатает приветствие в цвете в середине экрана, а другое обычно в исходной позиции курсора:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
Упомянутая ESC ]
вами последовательность - это OSC или команда операционной системы, которая в основном используется в команде для установки заголовка окна xterm
и других, например:
echo -e '\033]0;new window title\a'
Кроме того, есть также 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» или производные / похожие).
$ echo $TERM
xterm
Если вы хотите написать сценарии, которые (в некоторой степени) НЕЗАВИСИМЫ от термина, но по-прежнему используют, например, цвет и другие специальные функции, ознакомьтесь с содержанием man terminfo
.
например
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
будет печататься .test.
с test
желтоватым фоном и красным цветом переднего плана, и это будет работать для ЛЮБОГО терминала, который фактически способен использовать цвета таким же образом.
Чтобы увидеть, что на самом деле напечатано, направьте это od -t x1z
как
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... где значения отображаются в шестнадцатеричном формате (из-за "х").