Відповіді:
Рядок є насправді, \033[і це ще не все.
Після цього відкриваючої кронштейни приходить серія цифр та символів. Цей рядок відомий як послідовність відхилення та використовується для керування курсором та кольором тексту, серед іншого.
недрукарські вхідні послідовності повинні бути укладені
\[\033[ 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
Отже, якщо ви хочете, щоб запит консолі був синім, ви використовуєте наступну послідовність евакуації (у назві файлу, яку я забуваю):
\[\033[34m\]
(Зауважте m)
Однак ця послідовність втечі не лише керує кольором. Він також може керувати переміщенням курсору. Ось таблиця / список із кодами руху та способом їх роботи:
Розташуйте курсор:
\033[<L>;<C>H
Або
\033[<L>;<C>f
ставить курсор у рядок L та стовпці С.
Перемістіть курсор вгору на 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використовуйте ці дві послідовності.
І приклад, використовуючи одну з цих послідовностей евакуації: скажіть, що я хочу розташувати свій курсор у рядку 3, стовпці (символі) 9. Для цього я б використав
\[033\[3;9H]
(Я припускаю, що стовпець 0 - це перша позиція, тож це буде восьмий символ).
Джерело: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (також читати 6.2)
Більш загальне читання: http://ascii-table.com/ansi-escape-sequences.php
[2Kстирає весь рядок до і після курсору. Набагато кращим джерелом була б стаття у Вікіпедії, або ви можете перейти безпосередньо до ECMA-48 , розділ 8.3.117 SGR - Виберіть графічне видання .
0;в кольоровій послідовності непотрібна. Це просто робить колір фону за замовчуванням перед встановленням переднього плану. Ви також можете встановити фон за допомогою 4x.
Вони керують командами для терміналу.
Спочатку термінали були досить тупими пристроями, підключеними до послідовного порту, а не тим фантазійним програмним забезпеченням із графічним інтерфейсом з декількома вкладками з меню, яке ми маємо зараз. Оскільки вони отримали лише потік символів (байти), чіткого поділу між даними (що надрукувати на екрані) та командами (як надрукувати їх) не було. Натомість команди представлені спеціальними символами управління.
Очевидними контрольними символами є такі речі, як подача рядків (новий рядок), зворотний простір та звуковий сигнал, але більш конкретні команди подаються як послідовності символів, починаючи з ESCсимволу (код 27 у десятковій, 0x1b у шістнадцятковій або 033 вісімковий). Його часто представляють як ^[, або \033як у вашому прикладі.
Послідовність ESC [називається CSI, або введення послідовності управління, і вона запускає команду з необов'язковими числовими параметрами, закінчуючи зазвичай буквою, яка визначає головну команду. Більшість поширених послідовностей втечі належать до цього класу.
Списки кодів евакуації можна знайти, наприклад 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 , наприклад, для зміни назви вікна терміналу.
Послідовності втечі можуть починатися з різних символів. C1 (8-біт) управління Символами розділу в XTERM управління послідовностями згадує кілька з них: CSI(які ви бачите , як escape[, APC, DCS, PM. Причина різного (другий) характер, тому що пара (втеча і ]) пов'язана з однобайтовий керуючий символ, що використовується для різних типів послідовності відходу.
Якщо ви прочитаєте специфікацію, ви помітите, що 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
... де значення відображаються у шістнадцятковому розмірі (через "х").