Белл и escape-символ в строке подсказки

Моя строка приглашения печатается с использованием этого утверждения,

printf '\033]0;%s@%s:%s\007' user host /home/user 

Зачем нужен escape-символ ( \033 ) и символ колокола ( 007 )? Когда я запускаю ту же команду вручную, она ничего не печатает.

Когда я удалил escape-символы и дал команду as,

 printf '%s@%s:%s' user host /home/user 

он печатает,

 user@home:/home/user 

что легче понять.

Итак, как escape-символы \033 и 007 преобразуются в строку приглашения оболочки?

2 Solutions collect form web for “Белл и escape-символ в строке подсказки”

Только \033 – это побег, и он инициирует 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' 

Фактически, escape-последовательность начинается с первого escape-символа и заканчивается \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 являются частями escape-последовательности, которые могут быть изменены на другие символы. Терминал рассматривает пару байтов как один управляющий символ (так же как 4 байта \007 обрабатываются printf как один символ). Ссылаясь на XTerm Control Sequences , могут быть полезны секции управляющих символов 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 ) для завершения escape-последовательности является аномалией. Он не соответствует стандарту ( ECMA-48 ). Элементы управления операционной системой должны начинаться с ESC ] или 0x9d и заканчиваться ESC \ или 0x9c.

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

  • Другой вопрос об исключении строки Bash (с использованием эха)
  • Правильное использование escape-символов в файле рабочего стола
  • Смутно, когда нужно избегать метасимволов в дорожках
  • Квадратный кронштейн квадратной скобки A ^ [[A - Что это значит?
  • В SGR номер 38 и 48, откуда берутся 2 и 5 номеров?
  • Понимание того, что происходит, когда я сбрасываю конечную последовательность символов с помощью Ctrl-v?
  • sh -c: Неудачная строка с котировкой строки
  • Вопросы последовательности команд DEC ANSI; перемещение курсора
  • Как удалить ненужные символы из файла, сгенерированного командой script в linux
  • Значение \ 0; в PS1 в .bashrc
  • Что это означает, когда символы появляются в подсказке после операции?
  • Interesting Posts

    Как отправлять SMS-сообщения с мобильного телефона или маршрутизатора? (Linux / Textmode)

    Перемещение и переименование сотен файлов .jpg, все имена 5003.jpg

    Изменения в live usb persist linux после установки?

    Управление (добавление / удаление и т. Д.) Пользователей в squashfs (файловая система RO) с небольшим R / W-разделом

    Распакуйте все файлы в директории с тем же именем

    Подробный DNS-запрос для просмотра запроса DNS-запроса?

    Установка linux на 32-битной машине UEFI

    Измените метку времени, чтобы использовать эпоху. Bash get error как дополнительный операнд

    Браузер Chromium не позволяет установить формат бумаги по умолчанию для «Печать в файл»,

    Ограничить доступ к файлам только для добавления

    Не удается получить доступ к приводу Windows: «Windows спящий, отказался от установки»

    Переназначить все domain.com/path, которые не начинаются с domain.com/wiki, на домен.com/wiki – NginX Proxy

    Как сохранить подсказку в фоновом режиме?

    Как масштабировать xvfb?

    2 последовательных входа в систему ssh

    Linux и Unix - лучшая ОС в мире.