Ci sono molte domande su SE che mostrano come recuperare dal terminale rotto cat /dev/urandom
. Per coloro che non hanno familiarità con questo problema, ecco di cosa si tratta:
- Esegui
cat /dev/urandom
o equivalente (ad esempio,cat binary_file.dat
). - L'immondizia è stampata.
Andrebbe bene ... tranne che il tuo terminale continua a stampare immondizia anche dopo che il comando è terminato! Ecco uno screenshot di un testo errato che in effetti è l'output di g ++:
Immagino che la gente avesse ragione sugli errori C ++ a volte troppo criptici!
La solita soluzione è eseguire stty sane && reset
, anche se è un po 'fastidioso eseguirlo ogni volta che succede.
Per questo motivo , ciò su cui voglio concentrarmi in questa domanda è il motivo originale per cui ciò accade e come impedire che il terminale si rompa dopo che tale comando è stato emesso. Non sto cercando soluzioni come reindirizzare i comandi offensivi tr
o xxd
, perché ciò richiede che tu sappia che il programma / file emette binario prima di eseguirlo / stamparlo effettivamente e deve essere ricordato ogni volta che ti capita di generare tali dati .
Ho notato lo stesso comportamento in URxvt, PuTTY e il frame buffer di Linux, quindi non penso che questo sia un problema specifico del terminale. Il mio principale sospetto è che l'output casuale contenga un codice di escape ANSI che inverte la codifica dei caratteri (in effetti, se si esegue di cat /dev/urandom
nuovo, è probabile che si spezzerà il terminale, il che sembra confermare questa teoria). Se questo è giusto, qual è questo codice di escape? Esistono modi standard per disabilitarlo?