Ada banyak pertanyaan di SE yang menunjukkan bagaimana memulihkan dari terminal yang rusak cat /dev/urandom
. Bagi mereka yang tidak terbiasa dengan masalah ini - ini tentang apa:
- Anda menjalankan
cat /dev/urandom
atau setara (misalnya,cat binary_file.dat
). - Sampah dicetak.
Itu akan baik-baik saja ... kecuali terminal Anda terus mencetak sampah bahkan setelah perintah selesai! Berikut adalah tangkapan layar dari teks yang salah ditulis yang sebenarnya merupakan keluaran g ++:
Saya kira orang-orang benar tentang kesalahan C ++ terkadang terlalu samar!
Solusi yang biasa adalah menjalankan stty sane && reset
, meskipun agak menjengkelkan untuk menjalankannya setiap kali ini terjadi.
Karena itu, apa yang ingin saya fokuskan dalam pertanyaan ini adalah alasan awal mengapa ini terjadi, dan bagaimana mencegah terminal dari kerusakan setelah perintah tersebut dikeluarkan. Saya tidak mencari solusi seperti memipipkan perintah yang menyinggung ke tr
atau xxd
, karena ini mengharuskan Anda untuk mengetahui bahwa program / file menghasilkan biner sebelum Anda benar-benar menjalankan / mencetaknya, dan perlu diingat setiap kali Anda menghasilkan data seperti itu .
Saya perhatikan perilaku yang sama di URxvt, Putty dan Linux frame buffer jadi saya tidak berpikir ini adalah masalah khusus terminal. Tersangka utama saya adalah bahwa output acak berisi beberapa kode pelarian ANSI yang membalik pengkodean karakter (pada kenyataannya, jika Anda menjalankan cat /dev/urandom
lagi, kemungkinan itu akan membuka terminal, yang tampaknya mengkonfirmasi teori ini). Jika ini benar, kode melarikan diri apa ini? Apakah ada cara standar untuk menonaktifkannya?