Є багато питань щодо 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
ще раз, швидше за все, він розірве термінал, який, здається, підтверджує цю теорію). Якщо це правильно, що це за код втечі? Чи є стандартні способи її відключити?