Есть много вопросов о SE, которые показывают, как восстановиться после поломки терминала cat /dev/urandom
. Для тех, кто не знаком с этой проблемой - вот что это такое:
- Вы выполняете
cat /dev/urandom
или эквивалент (например,cat binary_file.dat
). - Мусор распечатан.
Это было бы хорошо ... за исключением того, что ваш терминал продолжает печатать мусор даже после завершения команды! Вот скриншот ошибочного текста, который на самом деле выводится на g ++:
Я думаю, что люди были правы в том, что ошибки C ++ иногда слишком загадочны!
Обычное решение - запустить stty sane && reset
, хотя запускать его каждый раз, когда это происходит, немного раздражает.
Поэтому в этом вопросе я хочу остановиться на первоначальной причине, по которой это происходит, и на том , как предотвратить поломку терминала после выполнения такой команды. Я не ищу решения, такие как передача ошибочных команд в tr
или xxd
, потому что это требует, чтобы вы знали, что программа / файл выводит двоичный файл перед тем, как вы фактически запустите / распечатаете его, и должны запоминаться каждый раз, когда вам случается выводить такие данные ,
Я заметил то же самое поведение в буфере кадров URxvt, PuTTY и Linux, поэтому я не думаю, что это специфическая для терминала проблема. Я подозреваю, что случайный вывод содержит некоторый управляющий код ANSI, который переворачивает кодировку символов (фактически, если вы запустите cat /dev/urandom
снова, скорее всего, он сломает терминал, что, кажется, подтверждает эту теорию). Если это правильно, что это за escape-код? Есть ли стандартные способы его отключить?