ランダムコンソール出力が端末を破壊するのを防ぐ方法は?

ランダムコンソール出力が端末を破壊するのを防ぐ方法は?

SEには、破損した端末を回復する方法を示す多くの質問がありますcat /dev/urandom。この問題についてよく知らない人のために説明します。内容は次のとおりです。

  1. cat /dev/urandomまたはそれに対応するアクション(例:)を実行しますcat binary_file.dat
  2. ごみを印刷します。
  3. 問題ありません...ターミナルでゴミを印刷しない限り後ろにコマンドが完了しました!以下は、実際にg ++出力である間違ってレンダリングされたテキストのスクリーンショットです。

    スクリーンショットの例

    人々がC ++エラーが時々あまりにも不明であると思うのは正しいと思います!

一般的な解決策は実行することですstty sane && reset。しかし、これが起こるたびに実行する必要があるのは少し面倒です。

だから私が集中したいのは元の理由なぜこれが起こるのか、そして端末の損傷を防ぐ方法そのような命令が出たら。問題のコマンドを実際に実行/印刷する前に、プログラム/ファイル出力バイナリを知っておく必要があり、そのようなデータを出力するたびに必要なtrソリューションを探していません。xxd

URxvt、PuTTY、Linuxフレームバッファで同じ動作が見つかったため、これは端末関連の問題ではないようです。私が最も疑問に思うのは、ランダムな出力に文字エンコーディングを反転するいくつかのANSIエスケープコードが含まれていることです(実際にやり直すと、次cat /dev/urandomのような可能性があります)。侵入するこの理論を確認するように見えるターミナル)。これが正しい場合、このエスケープコードは何ですか?無効にする標準的な方法はありますか?

ベストアンサー1

いいえ:

  • 「無効」にする標準的な方法はありません。
  • 破損の詳細は実際には端末ごとに異なりますが、
  • 不適切に行動させるいくつかの一般的な特徴があります。

^N一般的に使用される機能については、および^O(有効/無効)で有効になっているVT100スタイルの代替文字セットを確認してください。これはUTF-8モードを使用すると一部の端末で抑制される可能性がありますが、同じ端末ではエスケープシーケンスで画面を破損するのに十分な機会があります(ここではGNU画面、Linuxコンソール、PuTTYを意味します)。する調べる。

たとえば、他のいくつかのエスケープシーケンスは、ホストクエリ(エスケープシーケンス)に対する端末の応答に依存します。ホストが予期しない場合、結果は画面上のジャンクです。

他の場合(Linuxコンソールにハードコードされたエスケープシーケンスを持つネットワークデバイスなど)、他の端末ではこれが誤ってエンコードされたと考えて停止したようです。

したがって、1つの端末に集中して不快に見えるものをすべて削除することができます(たとえば、一部の人はエディタからマウスの位置決め機能を削除することを提案しています)。それはおそらく明らかなバグのない結果をもたらすでしょう。 。しかし、これは単なるターミナルです。

おすすめ記事