Я сталкивался с последовательностями bash, такими как \033[999D
и \033[2K\r
которые используются, чтобы сделать некоторые манипуляции с распечаткой на терминале. Но что означают эти последовательности? Где я могу найти список / резюме в Интернете, чтобы помочь мне понять значение этих последовательностей?
19
Ответы:
Смотрите эту ссылку http://www.termsys.demon.co.uk/vtansi.htm . Как говорит Энтон,
\033
это восьмеричный код в стиле C для escape-символа.[999D
Перемещает курсор назад 999 столбцов, предположительно грубой силы способ добраться до начала строки.[2K
стирает текущую строку\r
это возврат каретки, который переместит курсор назад к началу текущей строки и является escape-последовательностью в стиле C, а не управляющей последовательностью терминала.Обновить
Как отмечали другие люди, эти управляющие последовательности сами по
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
.источник
tput
Вместо этого вы можете использовать команды для большей мобильности, iirc (но за счет меньшего охвата спецификой вашего терминала). VT100 (тот, о котором говорится на странице) поддерживается многими (но я думаю, что поддерживается не все). Но ваша переменная TERM может быть установлена на какой-то другой терминал, и это может повлиять на действие некоторых командtput
, это более надежный способ. Но теперь это повсеместная совместимость с ANSI, а не с конкретным терминалом VT100, хотя я думаю, что можно установитьxterm
режим, который их не принимает. Я обновлю немного больше информации об этом, я думаю.TERM=xterm
но не реализуют все, чтоxterm
делают.Это
\033
управляющий символ, и эти последовательности не являются специфичными для bash, а интерпретируются терминалом (программным или аппаратным (через сеть или последовательную линию)), в котором выполняется программа (bash). Есть много таких последовательностей .То, что делает каждый, зависит от терминала, от которого он зависит, и может также зависеть от любой предыдущей последовательности, изменяющей состояние терминала.
Они часто используются для установки цветов в приглашении bash , но я не нашел ваших конкретных примеров на этой странице.
источник
«\ 033 [999D» смешно. Некоторые терминалы реализуют меньше escape-последовательностей, поэтому это может потребоваться, если ни один из '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' или '\ r' не будет вести себя так, как они должен, но кто использует отображение текста из тысячи столбцов? Эти последовательности имеют справочную страницу в Linux: console_codes (4) . BJH21 имеет подробный список всех кодов . В зависимости от того, какая программа анализирует '\ 033', может быть доступна более понятная подстановка '\ e'.
На самом деле не предполагается, что они будут использоваться напрямую - правильный способ выдачи команд управления терминалом - это уровень абстракции, такой как ncurses, - но они функционируют так же хорошо из строковых литералов.
источник
\033[999D
будет резервное копирование за предыдущие строки. Может быть, это просто результат хитрого кодирования;) Вы также можетеbash
интерпретировать escape-коды напрямую, например$'\033[999D'
вы можете выполнить поиск по «033 терминам escape-списка» или « 033 tput » и посмотреть http://wiki.bash-hackers.org/scripting/terminalcodes для получения дополнительной информации, прежде чем кто-то ответит;]
источник