Intereting Posts
Какие установленные пакеты программного обеспечения используют большинство дискового пространства на Debian? Включить поддержку арабского языка в RHEL 7 Драйверы Fedora 28 и NVidia Производительность протоколов в встроенной Linux Лучший дистрибутив для USB Запретить запуск файла сценария удаленно с помощью SSH Apache SSL: серверный сертификат не содержит идентификатор, который соответствует имени сервера SSH-туннелирование через межсетевой экран в кластер Как настроить резервное копирование, если файловая система только для чтения Может ли systemd-journald использовать сеть для передачи? Терминал Arch Linux не запускается Беспроводная сеть не отображает сеть в результатах сканирования IP к команде консоли консоли Экран, затухающий на GNOME, без возможности отменить grep все строки в файле и запись строки в файл из точки соответствия шаблона

Почему я не могу отправлять escape-последовательности с клавиатуры, но могу сделать это из другого tty?

Я пытаюсь понять, как работает терминал, делая разные трюки, например, писать с одного tty на другой, меняя настройки tty1 с tty2 и т. Д. Кроме того, я пробую этот материал – с помощью клавиатуры измените цвет с помощью escape-последовательности. То есть, не через echo -e '\e[0;31m' , а путем ввода с клавиатуры. Это не работает.

Я делаю следующие шаги:

  1. Открыть tty1 и tty2
  2. В tty2 положите bash в режим сна, на sleep 10m . sleep 10m . Ввод слова «один».

введите описание изображения здесь

  1. Перейдите к tty1 do echo -n ^[[0;31m > /dev/tty2 , Первый символ ^[ получите этот путь Ctrl + v Esc
  2. Вернитесь к tty2 , набрав слово «два». Да – цвет был изменен на красный, с другого tty.

введите описание изображения здесь

  1. Повторите шаги 3,4, но с зеленым цветом и словом «три»

введите описание изображения здесь

  1. И, наконец, попробуйте отправить escape-последовательность непосредственно с клавиатуры, а не на другую tty , набрав ^[[0;37m в tty2 . Я делаю все одинаково – Esc ( Ctrl + v не требуется, потому что readline спит), затем [0;37m , но получите следующее:

введите описание изображения здесь

Вопрос: Почему это работает так? Все символы одинаковые, состояние терминала такое же, но в одном случае терминал получает escape-последовательность, а в другом случае нет.

Когда вы запускаете echo , вы отправляете вывод на терминал. Терминал интерпретирует escape-последовательности, такие как тот, который меняет цвета на выходе, который отправляется на него. Эти escape-последовательности предназначены для отправки приложениями, поэтому они распознаются на выходе, поступающем от приложения, запущенного в терминале. Обычно приложение, запущенное на терминале, является тем, которое запускается эмулятором терминала (вашей оболочкой), и теми, которые запускаются по очереди, но если вы запустите echo … >/dev/tty2 то echo эффективно «работает в терминале» ( в том смысле, что его выход идет на терминал, что важно здесь).

Когда вы нажимаете Esc [ и т. Д., Вы отправляете ввод на терминал. Терминал не интерпретирует escape-последовательности, такие как тот, который меняет цвета на вход, который он получает. Терминал интерпретирует escape-последовательности во входном сигнале, но для совершенно другой цели: это способ кодирования нажатий функциональных клавиш.

Как работают ввод с клавиатуры и вывод текста? имеет некоторые соответствующие предпосылки.