Що означає послідовність bash '\ 033 [999D' і де це пояснено?


19

Я натрапив на такі послідовності bash, як \033[999Dі \033[2K\rякі використовуються для того, щоб зробити певні маніпуляції над роздруківкою на терміналі. Але що означають ці послідовності? Де я можу знайти список / резюме в Інтернеті, щоб допомогти мені з’ясувати значення цих послідовностей?


3
Це термінальні послідовності, а не баш-послідовності. Вам потрібно переглянути документацію терміналу, щоб визначити їх функцію.
Кріс вниз

1
Ці послідовності служать для колоризації результатів. Перевірка: stackoverflow.com/questions/16845699 / ... і stackoverflow.com/questions/5947742 / ...
adizere

1
@adizere не всі послідовності втечі виконують зміни кольору. Послідовності в цьому Q призначені для маніпулювання лінією та переміщення курсору, а не кольору.
Кейсі

Відповіді:


32

Дивіться це посилання http://www.termsys.demon.co.uk/vtansi.htm . Як каже Ентон, \033 - восьмеричний код у стилі С для стилю втечі. [999DПереміщує курсор назад 999 стовпців, імовірно грубої сили спосіб дістатися до початку рядка. [2Kстирає поточний рядок. \rце повернення каретки, яке перемістить курсор назад до початку поточного рядка і є послідовністю втечі у стилі С, а не послідовністю управління терміналом.

Оновлення

Як зазначали інші люди, ці послідовності управління - це не що bashінше, а лише кінцевий пристрій / емулятор, на якому з'являється текст. Колись зазвичай ці послідовності трактувалися зовсім іншим обладнанням. Спочатку кожен би відповідав на абсолютно різні набори кодів. Для боротьби з цим termcapі terminfoбібліотеки, де використовуються для запису коду, сумісного з декількома терміналами. tputКоманда являє собою інтерфейс до terminfoбібліотеки ( termcapпідтримка також може бути зібрана в) і є більш надійним способом , щоб створити сумісні послідовності.

Однак це також є стандарт ANSI X3.64 або ECMA-48 . Будь-яка сучасна реалізація терміналу використовуватиме це. terminfoі termcapвсе ще актуальні, оскільки реалізація може бути неповною або включати нестандартні розширення, однак для більшості цілей можна припустити, що загальні послідовності ANSI працюватимуть.

xterm FAQ надає цікаву інформацію про відмінності між сучасними емуляторів терміналів (багато хто просто намагаються наслідувати xtermсебе) і як xtermпослідовності відносяться до VT100 терміналів , згаданих у наведеній вище посиланням. Він також забезпечує остаточний перелік xtermконтрольних послідовностей .

Також звичайно використовується консоль Linux, остаточний перелік послідовностей керування для неї можна знайти man console_codesразом із порівнянням з xterm.


Посилання, яке ви включили, - це лише сторінка, яку я шукав.
Олексій

@ Алекс Радий, що я знайшов це сам, більшість сторінок я бачив лише кольори обкладинки і якимось чином читати насправді складно. Це викладає приємно і просто.
Graeme

будьте уважні, що дія кодів евакуації залежить від типу терміналу (і ви можете імітувати декілька типів терміналу на сучасних екранах / ОС). Ви можете використовувати tputкоманди замість цього, щоб мати більше портативності, iirc (але за рахунок меншого покриття специфіки вашого терміналу). VT100 (той, про який розповідає сторінка) підтримується багатьма (але не все підтримується, я вважаю ...). Але ваша змінна TERM може бути встановлена ​​на якийсь інший термінал, і це може вплинути на ефекти деяких команд
Олів'є Дулак,

@Olivier, правильно tput- більш надійний спосіб. Але зараз сумісність ANSI, а не конкретний термінал VT100, є доволі всюдисущим, хоча я думаю, що можна xtermпереходити в режим, який їх не приймає. Я оновлю ще трохи інформації про це, думаю.
Graeme

@Olivier Багато термінальних емуляторів також налаштовано, TERM=xtermале не реалізують все, що xtermробить.
Graeme

5

Символ \033"біг", і ця послідовність не є специфікою bash, але інтерпретується терміналом (програмним чи апаратним забезпеченням (через мережу або послідовну лінію)), в якому працює (bash) програма. Таких послідовностей багато .

Що робити кожен, залежить від терміналу, від якого він залежить, а також може залежати від будь-якої попередньої послідовності, що змінює стан терміналу.

Вони часто використовуються для встановлення кольорів у підказці bash , але я не знайшов ваших конкретних прикладів на цій сторінці.


3

'\ 033 [999D' - смішно. Деякі термінали реалізують меншу кількість послідовностей евакуації, тому це може знадобитися, якщо жоден з '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' або '\ r' веде себе так, як вони Потрібно, але хто використовує відображення тексту у тисячі стовпців? Ці послідовності мають довідкову сторінку в Linux: console_codes (4) . bjh21 має детальний перелік усіх кодів . Залежно від того, який програма аналізує "\ 033", може бути доступна більш чітка заміна "\ e".

Дійсно, не використовувати їх безпосередньо - правильний спосіб видачі команд управління терміналом є шаром абстракції, таким як ncurses, - але вони функціонують так само добре від рядкових літералів.


Добре, я просто припустив, що це \033[999Dбуде резервне копіювання попереднього рядка. Можливо, це просто результат хитрого кодування;) Ви також можете bashбезпосередньо інтерпретувати коди втечі, наприклад$'\033[999D'
Graeme,

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.