同じ愚かなことをすると、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
待つよりもはるかに大胆な作業です。 )
答え2
実際、写真にはアウトラインは表示されません。ランニングreset
(通常)が役立ちます。それ。さらに、reset
固定端末モードは以下より安定していますstty sane
。
- これにより、
stty sane
エコーとキャリッジの戻りに関するターミナルモードの問題が解決されます。Unixまたはなど、ユーザーが不要な値に削除文字を設定するプラットフォーム(つまり、AIX、HPUX、およびSolaris)^?
。#
^H
- この
reset
コマンド(少なくともncursesによって提供されるコマンド)はこれらの設定を改善し、端末初期化文字列を送信します。それ通常代替文字セットをリセットします(ただし、一部の端末は異なる場合があります。これはUnix端末の説明で見落とされている機能です)。
もしあなたなら持つ線画の文字を表示します。これらの文字は引っ越す制御文字(エスケープシーケンスではありません):
SO Shift Out (Ctrl-N) -> Switch to Alternate Character Set. This
invokes the G1 character set.
私が作った線画キャラクターのスクリーンショットは次のとおりです。
ls
tput smacs
ls -l
時々、誰かがバイナリゴミと線で描かれた文字が混在している画像が表示されますが、この質問や他の言及された(ab)質問ではその機能を使用しません。逆に彼ら言う2つの異なる機能があります。
- すべての文字を印刷できるわけではありません(図の大きなスペースを考慮)。
- 一部のバイトシーケンスは正当なUTF-8を形成せず、端末エミュレータによって特別なマーカーで表示されます。Unicode 代替文字。
追加資料: