時々、カールまたはローカルファイルシステムからバイナリを取得します。ほとんどの場合、破損した端末は以下を使用して修理できます。初期化。他の場合、特にバイナリが大きい場合、端末は次の出力を印刷しながら数分間停止します。
また〜として知られています
c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;
2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;
2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;
2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;2c1;
このシーンについて3つの質問があります。
- 2c1 とはどういう意味ですか?端末がこれを印刷するのはなぜですか?
cat
対話型セッションでこれらの悪い動作が実際に防止された状況を見たことがありますか?- そのような猫(ceeまたはgolang)をプログラムする方法に関する提案はありますか?
私の初期の本能は、これを検出するためにcatを関数で包むことでしたが、これはかなり難しくて極端なケースが多いことにすぐに気づきました。
function cat() {
# warn user if
# - argument 1 is a large executable
# - argument 1 to the previous command in the a pipe-chain looks like a large binary
# abort if
# - session is interactive and we are able to detect 2c1 garbage
}
実用的な解決策は、「安全でない」入力を見るときは常にless(LESSPIPEを使用)を使用することですが、この質問はポケットベルとは何の関係もありません。チューブの数が徐々に減少していることを知っています。私は毎日積極的に使用しています。たぶん少ない+少ない制御することができますこの問題に対する解決策は、Lessの著者が約20〜30年前に同じ問題を実装したことです。。
しかし、catはさまざまな点で「呼び出し元」とは異なります。最も重要なのは、catがインタラクティブではないということです。これは私に多くの意味があります。
less + lesspipeの提案は実際には非常に素晴らしいです(IMHO)。しかし、私は制御文字の特性、特殊なエスケープシーケンス、およびさまざまな端末がこれらの入力を処理する方法に興味があります。
私は、制御文字の技術的詳細と、端末やシェルが「ゴミ」と制御文字を解釈する方法に興味があります。私は「この問題をどのように解決しますか?」と尋ねるのではありません。私は「なぜ端末がバイナリファイルをこのように処理するのか」と尋ねました。
ベストアンサー1
私はこれをバイナリについて警告するために使用し、less
いくつかのシステムではさまざまなタイプを処理します(例えばCentOS 7では、less file.rpm
RPMでファイルを表示できます。私はこれが「レスパイプ」と呼ばれると信じています。
また、次にこれが発生した場合は、正常にreset
戻ることができますtput reset
。彼らは端末にエスケープシーケンスを送信してデフォルトの通常状態にリセットするように指示し、stty sane
ttyデバイスファイルの設定を通常のデフォルトに変更するのと同じことを行います(バイナリダンプはこれらの設定に影響を与えてはいけません)。reset
また、ttyデバイスファイルのターミナルまたはターミナルエミュレータウィンドウサイズの概念(報告されているようにtty size
)を変更し、それに対するターミナルクエリをサポートします。