Какой тип последовательностей является escape-последовательностями, начинающимися с «\ 033]»

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

18
задан 14 December 2018 в 07:22

5 ответов

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

7
ответ дан 23 November 2019 в 02:05

Строка на самом деле \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

Википедия: https://en.wikipedia.org/wiki/ANSI_escape_code

25
ответ дан 23 November 2019 в 02:05

Они - команды управления для терминала.

Терминалы были первоначально довольно немыми устройствами, подключенными к последовательному порту, и не они представляют себе программное обеспечение мультивкладки 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 (и другие буквы), которые устанавливают наборы национального характера на некоторых терминалах к потенциально веселому эффекту.

16
ответ дан 23 November 2019 в 02:05

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.

8
ответ дан 23 November 2019 в 02:05

"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").

1
ответ дан 23 November 2019 в 02:05

Другие вопросы по тегам:

Похожие вопросы: