Какие типы последовательностей представляют собой escape-последовательности, начинающиеся с "\ 033]"

10

Я нашел много escape-последовательностей в Bash, начиная с «\ 033]», но каковы эти последовательности и почему они начинаются с «\ 033]»?

    
задан Sessho 01.10.2016 в 17:03
источник

5 ответов

15

Строка фактически 3[ , и это не все.

После этого открывающая скобка появляется серия цифр и символов. Эта строка известна как escape-последовательность и используется для управления курсором и цветом текста консоли, между прочим.

  

непечатные escape-последовательности должны быть заключены в \[3[ and \]

Если управляющая последовательность управляет цветом текста, то за ним будет следовать 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-последовательность (в имени файла, которое я забыл):

\[3[34m\]

(Обратите внимание на m )

Однако эта escape-последовательность не только управляет цветом. Он также может управлять движением курсора. Вот таблица / список с кодами движения и как они работают:

  • Поместите курсор:

    3[<L>;<C>H
    

    или

    3[<L>;<C>f
    

    помещает курсор в строку L и столбец C.

  • Переместите курсор вверх по N строкам:

    3[<N>A
    
  • Переместите курсор вниз на N строк:

    3[<N>B
    
  • Переместите курсор вперед N столбцов:

    3[<N>C
    
  • Переместите курсор назад N столбцов:

    3[<N>D
    
  • Снимите экран, перейдите к (0,0):

    3[2J
    
  • Стереть до конца строки:

    3[K
    
  • Сохранить позицию курсора:

    3[s
    
  • Восстановить позицию курсора:

    3[u
    

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

И пример с использованием одной из следующих управляющих последовательностей: скажем, я хочу поместить мой курсор в строку 3, столбец (символ) 9. Для этого я бы использовал

\[033\[3;9H]

(Я предполагаю, что столбец 0 является первой позицией, поэтому это будет восьмой символ).

Источник: Ссылка (также читайте 6.2)

Более общее чтение: Ссылка

Википедия: Ссылка

    
ответ дан TheWanderer 01.10.2016 в 17:12
11

Это управляющие команды для терминала.

Терминалы изначально были довольно немыми устройствами , подключенными к последовательному порту, а не эти причудливые графические программы с несколькими вкладками с меню мы теперь имеем. Поскольку они получали только поток символов (байты), не было четкого разделения между данными (что нужно печатать на экране) и командами (как его напечатать). Вместо этого команды представлены специальными управляющими символами.

Очевидными управляющими символами являются такие вещи, как линейный фид (новая линия), обратный пробел и звуковой сигнал колокола, но более конкретные команды задаются как последовательности символов, начиная с символа ESC (код 27 в десятичном формате, 0x1b в шестнадцатеричном формате или Октанол 033). Он часто представлен как ^[ или 3 , как в вашем примере.

Последовательность ESC [ называется CSI или интродуктором управляющей последовательности, и она запускает команду с необязательными числовыми параметрами, заканчивая обычно буквой, которая определяет основную команду. Большинство общих escape-последовательностей попадают в этот класс.

Списки escape-кодов можно найти, например. на странице console_codes(4) и на странице Википедии ESCSI escape-коды .

Некоторые примеры:

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 принимает 3 как представление символа ESC .

например. это будет печатать приветствие в цвете в середине экрана, а другое обычно в исходной позиции курсора:

echo -e '3[s3[12;30f3[30;46m  Hello!  3[0m3[uhello'

Последовательность ESC ] , о которой вы упомянули, является командой OSC или операционной системы, которая в основном используется в команде для установки заголовка окна в xterm и других, например:

echo -e '3]0;new window title\a'

Затем есть также ESC ( A (и другие буквы), которые устанавливают национальные наборы символов на некоторых терминалах, потенциально веселый эффект .     

ответ дан ilkkachu 01.10.2016 в 23:35
6

Они называются escape-кодами ANSI , и они перечислены в для консольных_кодов . Они не специфичны для Bash, а работают в любом консольном приложении, если терминал поддерживает их (большинство терминальных эмуляторов).

    
ответ дан Joey Marianer 01.10.2016 в 19:46
2

Escape, за которым следует прямоугольная скобка escape ] используется для представления команды операционной системы ( OSC ).

Он находится в ECMA-48 , и вы можете прочитать резюме управляющие последовательности, используемые xterm в Последовательности управления XTerm , например, для изменения названия окна терминала.

Последовательности Escape могут начинаться с разных символов. Элемент C1 (8-бит) символов управления в XTerm Control Sequences упоминается несколько из них: CSI (который вы видите как escape [ , APC , DCS , PM . Причина для другого (второго) символа состоит в том, что пара (escape и ] ) связана с однобайтовым управляющим символом для разных типов escape-последовательности.

Если вы прочитаете спецификацию, вы заметите, что CSI используется для элементов управления с числовыми параметрами, а OSC - строки. Помимо простого синтаксиса, комитет, создавший этот стандарт, имел в виду для APC и PM , которые отличались от DCS и OSC .

    
ответ дан Thomas Dickey 03.10.2016 в 01:11
1

«escape-последовательности», описанные в других ответах, зависят от того, какой терминал TYPE у вас есть (чаще всего «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

... где значения отображаются шестнадцатеричным (из-за «x»).

    
ответ дан Hannu 02.10.2016 в 16:06