Почему `cat / dev / urandom` ломает ваш терминал?

Ответы:

21

В то время как есть обычные печатные символы ASCII, которые отправляются туда и обратно на терминале, есть также много непечатаемых символов, которые используются системой для связи с терминалом. Например, если программа отправляет символ 0x07(«ASCII Bell symbol»), ваш терминал должен подать звуковой сигнал.

Другие специальные последовательности могут использоваться для изменения цвета отображаемого текста, направления, в котором он отображается, заголовка окна, размера окна и т. Д., И многих других.

Когда ты

cat /dev/urandom

Куча случайных символов сбрасывается на ваш терминал, и терминал не может сказать, что это не настоящие управляющие коды.

Поскольку программа эффективно отправляет случайные команды на терминал, терминал оказывается в случайном, часто непригодном для использования состоянии.

Дарт Андроид
источник
4

Некоторым случайным выводом будут экранирующие коды ANSI ( http://en.wikipedia.org/wiki/ANSI_escape_code ), которые могут делать такие забавные вещи, как скрытие курсора или выбор альтернативных шрифтов. Другой возможностью являются последовательности Юникода: случайный поток байтов не будет действительным UTF-8, и, вероятно, не все терминалы, поддерживающие Юникод, обрабатывают это изящно.

vbraun
источник
1

cat /dev/urandomдаст вам поток случайных байтов между 0и 255, не все из этих значений являются допустимыми текстовыми символами. Поскольку окно терминала передавало недопустимые данные, оно никогда не ожидало, что оно может перевести приложение терминала в «сломанное» состояние.

Скотт Чемберлен
источник