Es gibt viele Fragen zu SE, die zeigen, wie man sich von einem durchgebrochenen Terminal erholt cat /dev/urandom
. Für diejenigen, die mit diesem Thema nicht vertraut sind - hier, worum es geht:
- Sie führen aus
cat /dev/urandom
oder äquivalent (zum Beispielcat binary_file.dat
). - Müll wird gedruckt.
Das wäre in Ordnung ... außer, dass Ihr Terminal auch nach Beendigung des Befehls weiterhin Müll druckt ! Hier ist ein Screenshot eines falsch gerenderten Textes, der tatsächlich in g ++ ausgegeben wird:
Ich denke, die Leute hatten Recht damit, dass C ++ - Fehler manchmal zu kryptisch sind!
Die übliche Lösung ist das Ausführen stty sane && reset
, obwohl es ärgerlich ist, sie jedes Mal auszuführen , wenn dies geschieht.
Aus diesem Grund möchte ich mich in dieser Frage auf den ursprünglichen Grund konzentrieren, warum dies geschieht, und wie verhindert werden kann, dass das Terminal nach der Ausgabe eines solchen Befehls abbricht . Ich bin nicht auf der Suche nach Lösungen wie dem Weiterleiten der beleidigenden Befehle an tr
oder xxd
, da dies erfordert, dass Sie wissen, dass das Programm / die Datei Binärdaten ausgibt, bevor Sie sie tatsächlich ausführen / drucken, und dass Sie sich jedes Mal daran erinnern müssen, wenn Sie solche Daten ausgeben .
Ich habe dasselbe Verhalten in URxvt, PuTTY und Linux-Frame-Buffer festgestellt, daher halte ich dies nicht für ein terminalspezifisches Problem. Mein Hauptverdacht besteht darin, dass die Zufallsausgabe einen ANSI-Escape-Code enthält, der die Zeichencodierung umdreht (wenn Sie cat /dev/urandom
erneut ausführen , wird das Terminal wahrscheinlich beschädigt , was diese Theorie zu bestätigen scheint). Wenn dies richtig ist, wie lautet dieser Escape-Code? Gibt es Standardmethoden zum Deaktivieren?
Leiten Sie die Ausgabe Ihres Befehls usw. in tee -
quelle
more
oderless
?