В связи с этим вопросом: /server/534449
Как cat /dev/urandom
заставить некоторые терминальные эмуляторы работать не так?
В связи с этим вопросом: /server/534449
Как cat /dev/urandom
заставить некоторые терминальные эмуляторы работать не так?
Ответы:
В то время как есть обычные печатные символы ASCII, которые отправляются туда и обратно на терминале, есть также много непечатаемых символов, которые используются системой для связи с терминалом. Например, если программа отправляет символ 0x07
(«ASCII Bell symbol»), ваш терминал должен подать звуковой сигнал.
Другие специальные последовательности могут использоваться для изменения цвета отображаемого текста, направления, в котором он отображается, заголовка окна, размера окна и т. Д., И многих других.
Когда ты
cat /dev/urandom
Куча случайных символов сбрасывается на ваш терминал, и терминал не может сказать, что это не настоящие управляющие коды.
Поскольку программа эффективно отправляет случайные команды на терминал, терминал оказывается в случайном, часто непригодном для использования состоянии.
Некоторым случайным выводом будут экранирующие коды ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), которые могут делать такие забавные вещи, как скрытие курсора или выбор альтернативных шрифтов. Другой возможностью являются последовательности Юникода: случайный поток байтов не будет действительным UTF-8, и, вероятно, не все терминалы, поддерживающие Юникод, обрабатывают это изящно.
cat /dev/urandom
даст вам поток случайных байтов между 0
и 255
, не все из этих значений являются допустимыми текстовыми символами. Поскольку окно терминала передавало недопустимые данные, оно никогда не ожидало, что оно может перевести приложение терминала в «сломанное» состояние.