Я нашел много escape-последовательностей в Bash, начинающихся с \ 033]
, но что это за последовательности и почему они начинаются с \ 033]
?
Их называют управляющие коды ANSI , и они перечислены в страница справочника для console_codes. Они не являются определенными для Bash, а скорее работа ни в каком консольном приложении, пока терминал поддерживает их (большинство эмуляторов терминала делает).
Строка на самом деле \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-sequences.php
Они - команды управления для терминала.
Терминалы были первоначально довольно немыми устройствами, подключенными к последовательному порту, и не они представляют себе программное обеспечение мультивкладки GUI с меню, которые мы теперь имеем. Так как они только получили поток символов (байты), не было никакого четкого разделения между данными (что распечатать на экране), и команды (как распечатать его). Вместо этого команды представлены со специальными управляющими символами.
Очевидные управляющие символы являются материалом как перевод строки (новая строка), клавиша Backspace и звуковой сигнал звонка, но более определенные команды даны как последовательности символов, начиная с ESC
символ (кодируют 27 в десятичном числе, 0x1b в шестнадцатеричном числе или 033 восьмеричных). Это часто представлено как ^[
, или \033
как в Вашем примере.
Последовательность ESC [
назван CSI или Управляющей последовательностью introducer, и он запускает команду с дополнительных числовых параметров, заканчивающихся в обычно букве, которая определяет основную команду. Большинство общих escape-последовательностей падает в этом классе.
Списки управляющих кодов могут быть найдены, например, в console_codes(4)
страница справочника, и на странице Wikipedia для управляющих кодов 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-Bit) Control Characters в Управляющих последовательностях XTerm упоминает несколько из тех: CSI
(который Вы рассматриваете как Escape[
, APC
, DCS
, PM
. Причина другого (второго) символа состоит в том потому что пара (Escape и ]
) связан с однобайтовым управляющим символом, используемым для различных типов escape-последовательности.
При прочтении спецификации Вы заметите это CSI
используется для средств управления с числовыми параметрами, в то время как OSC
позволяет строки. Вне просто синтаксиса комитет, который создал этот стандарт, имел в виду использование для APC
и PM
который отличался от DCS
и OSC
.
"Escape-последовательности", описанные в других ответах, зависят, на котором терминальном ТИПЕ Вы имеете (чаще всего "ANSI" или производных / подобные).
$ echo $TERM
xterm
Если Вы хотите записать сценарии, которые (НЕСКОЛЬКО) НЕЗАВИСИМЫ от termninal, но все еще использует, например, цвет и другие специальные функции, то взгляните на содержание 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
... где значения являются шоу в шестнадцатеричном (из-за "x").