Символ колокольчика и escape в строке запроса

Если Вы подразумеваете, что дубликаты должны быть удалены из списков разделенных запятой значений слов (где слова являются последовательностями непробелов), то, возможно, что-то как:

$ echo 2,1,1,2,c,1 a,a,a,b,c | perl -M'List::MoreUtils uniq' -lpe '
    s/[\S,]+,[\S,]+/join ",", uniq(split",",$&)/ge'
2,1,c a,b,c
6
09.06.2015, 12:56
2 ответа

Только \ 033 является escape-последовательностью, и он инициирует escape-последовательность вплоть до включения ; . \ 033] 0; . Это инициирует строку, которая устанавливает заголовок в строке заголовка терминала, и эта строка заканчивается специальным символом \ 007 .

См. man console_codes :

   It accepts ESC ] (OSC) for the setting of certain resources.  In  addi‐
   tion  to  the ECMA-48 string terminator (ST), xterm(1) accepts a BEL to
   terminate an OSC string.  These are a few of the OSC control  sequences
   recognized by xterm(1):

   ESC ] 0 ; txt ST        Set icon name and window title to txt.

То, что вы не видите никаких изменений, вероятно, связано с тем, что ваша подсказка устанавливает заголовок в строку заголовка по умолчанию при возврате к подсказке. Попробуйте:

 PROMPT_COMMAND= ; printf '\033]0;Hello World!\007'
3
27.01.2020, 20:27

На самом деле, управляющая последовательность начинается с первого управляющего символа и заканчивается символом \033\007 (ASCII ESC и ASCII BEL).

Символ 0 является параметром, соответствующим Ps в описании для xterm, а текст после точки с запятой - Pt:

        Ps = 0  -> Change Icon Name and Window Title to Pt.
        Ps = 1  -> Change Icon Name to Pt.
        Ps = 2  -> Change Window Title to Pt.

И \033], и \033\007 являются частями управляющей последовательности, которые могут быть заменены на другие символы. Терминал воспринимает пару байтов как один управляющий символ (так же, как 4 байта \007 воспринимаются printf как один символ). В разделе Последовательности управления XTerm, раздел Управляющие символы C1 (8-битные) может быть полезен:

ESC \
     String Terminator (ST  is 0x9c).
ESC ]
     Operating System Command (OSC  is 0x9d).

для понимания начала раздела Управление операционной системой:

OSC Ps ; Pt ST
OSC Ps ; Pt BEL

Использование BEL (\007) для завершения управляющей последовательности является аномалией. Оно не соответствует стандарту (ECMA-48). Элементы управления операционной системы должны начинаться с ESC ] или 0x9d, а заканчиваться ESC \ или 0x9c.

Давным-давно разработчик(и) xterm добавил управляющую последовательность для установки заголовка. В X11R1 (1987) программа просто считывала последовательность, пока не получала непечатаемый символ. Позже, в X11R4 (1989), кто-то усовершенствовал эту последовательность, завершив ее на символе BEL . Стандарт существовал дольше, но причина выбора BEL вместо ST неизвестна. В конце концов, этот вопрос был решен в конце 1990-х годов, признав любой из них (но сохранив BEL в качестве альтернативы, поскольку многие пользователи полагались на жестко закодированное поведение с BEL).

4
27.01.2020, 20:27

Теги

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