追加読書

追加読書

clearコマンドを使って画面を消去するとき。消去されません(コマンドが完了したら少し上にスクロールするとスクリーンショットを参照)。

ここに画像の説明を入力してください。

それで、正しい動作を得るためにコマンドを倍増しました。

$ clear && clear && DD=0 ...

ここに画像の説明を入力してください。

画面を消去するには、なぜデュアルコマンドが必要なのですか?

UPD

実際にclear画面を消去するだけです。ただし、上にスクロールすると、最後の25行が表示されます(画面が80×25の場合)。実行時にclear;clearこの行を消去します。

答え1

ここで注目すべき重要な点は質問のラベルです。この動作は、GNOME端末とlibvteに構築された他の端末エミュレータにのみ適用されます。 Xterm、Unicode RXVT、Linuxカーネルに組み込まれているターミナルエミュレータ、またはFreeBSDコンソールではこれを見ることはできません。

一般的に起こることはこれです。

  1. このclearコマンドはterminfo / termcapを表示し、適切な制御シーケンスを発行します。
    1. terminfo / termcapエントリにE3この機能がある場合は、最初に記録されます。これはスクロールバックバッファをクリアする制御シーケンスを発行します。これとその背後に隠された歴史については、後で詳しく説明します。clearDickeyはこのコマンドのncursesのマニュアルページを使用します。
    2. 次に、clearこの機能を使用して表示される画面を消去します。
  2. terminfo / termcapエントリの制御順序は、端末の種類によって決まります。ただし、画面を消去するためにFormFeedを使用する端末を除いて(最近ではほとんど発生しません)(DEC VTおよびそのようなプログラムではこれを行いません)、通常の古いECMA-48制御シーケンスまたはその拡張です。いくつかの例:
  3. 端末エミュレータは制御順序に従って動作します。 ECMA-48とXterm拡張の定義によると:
    • CSI H(CUP) カーソルを返します。
    • CSI 0 J(ED 0) または CSI は、J現在のカーソル位置から画面の終わりまで削除されます。
    • CSI 2 J(ED 2) 全画面を削除します。
    • CSI 3 J(ED 3) スクロールバックバッファをクリアします。

GNOME端末の場合:

  1. 端末タイプは正しいgnomeことで、一部の人はそれを誤って設定しましたxterm
  2. 用語情報gnome項目この機能は定義されておらE3ず、多くのシステムでそのまま残ります! - このアイテムxtermはまだ削除されていないため存在しません。Dickeyの用語について。だから能力の内容だけをclear書いてください。clear
  3. これらのterminfo項目の機能内容は、カーソルをclear返してから全画面を消去する制御シーケンスです。
  4. ただし、GNOME端末は全画面消去を正しく実行できません。 より具体的には、ベースライブラリであるlibvteはコードでこれを行いません。そのVteTerminalPrivate::seq_clear_screen()機能。代わりに、libvteは空白行を含む画面全体をスクロールし、カーソル位置を空白行の最初に移動します。

だからあなたはあなたが見るものを見る。 libvteは指示を受けたときに全画面を消去しません。代わりに、誰かが質問者がここでしたことを正確に実行するまで、表面的に同様のことを行います。つまり、端末ウィンドウをスクロールバックしてスクロールバッファを確認します。もしそうなら、違いは明らかです。

XtermやUnicode RXVTなどの他の端末エミュレータでは、ED 2制御シーケンスは画面を上から下に画面上のすべての位置を消去し、スクロールバックバッファを変更しません。ただし、libvte端末エミュレータは現在の画面をスクロールバックバッファにプッシュし、画面の空白行を追加します。前の画面の内容は削除されず、スクロールバックバッファに移動されます。

コマンドを2回実行すると追加clearされます。二つ画面に空白行が表示されます。スクロールバックバッファが十分に大きい場合は、次のことができます。まだ元の画面コンテンツを見つけるには、スクロールバックバッファを詳しく見てください。

追加読書

答え2

端末を消去して出力バッファ全体を破壊するには、次のことをお勧めしますtput reset。たとえば、以前のプログラムがクラッシュして端末をクリーンでない状態にした場合、端末は確実にクリアされ、ステータスがボーナスに変更されます。また、tput正しい端末タイプを決定するのに十分スマートである必要があるため、端末がVT100または他のコマンドシーケンスを使用しているかどうかを知る必要はありません。

POSIXで定義されているように、tput resetすべてのPOSIX互換システムでも機能する必要があります。https://pubs.opengroup.org/onlinepubs/007904975/utilities/tput.html

関連情報