「head /bin/ls」が端末をリセットするのはなぜですか?

「head /bin/ls」が端末をリセットするのはなぜですか?

同じ愚かなことをすると、cat /var/log/wtmpスクリーンショットのように端末が複雑になる可能性があります。私は多くの方法があることを知っています。この問題を解決する。数年前に聞いた記事で言及されていない方法の1つは、スクリーンショットの赤いボックスに強調表示されたコマンドを実行することです。

head /bin/ls

これはうまくいきます。

なぜ?

端末リセットスクリーンショット

ベストアンサー1

端末は、表示する文字データと共に送信されるエスケープシーケンスによって制御されます。たとえば、これはecho -e '\e[34m'多くの端末のテキストを青色に置き換える方法です。一部の文字を端末に再エコーします。これは前景色を設定するエスケープシーケンスです。

一部の代替文字セット(およびおそらくそれ以上)に切り替えるように指示され、端末がめちゃくちゃになりました。/var/log/wtmp文字セットを切り替えるためのエスケープシーケンスが含まれているので、これを行います。技術的にはあまり汚れません。設計どおりに正しく動作します。 (tput smacs必要に応じて端末を操作してください。tput rmacsこのパラメータをもう一度変更してください。)

resetエスケープシーケンスを送信してさまざまなパラメータをデフォルト値にリセットするのと同じ機能です。これにより、端末が「修正」されます。

このhead /bin/lsトリックは、あなた/bin/ls(または少なくともの印刷された部分head)にターミナルパラメータを再変更するエスケープシーケンスが含まれているために機能します。これはまったく移植性がありません。たとえば、ここでは動作しません。そして、デフォルト値をリセットするのは、おそらくreset待つよりもはるかに大胆な作業です。 )

おすすめ記事