clear
を使用する場合 画面をクリアするコマンド。クリアされません(コマンドの実行後に少し上にスクロールするとスクリーンショットが表示されます)
だから私は正しい振る舞いを得るためにコマンドを2倍にします:
$ clear && clear && DD=0 ...
画面をクリアするためにコマンドを2倍にする必要があるのはなぜですか?
UPD
実際、 clear
だけなら 画面がクリアになりました。しかし、上にスクロールして最後の25行を表示できます(画面が80×25の場合)。 clear; clear
を実行すると それらの行をクリアしました。
承認された回答:
ここで注意すべき重要なことは、質問のタグです。この動作は、GNOMEターミナルおよびlibvte上に構築されたその他のターミナルエミュレーターに固有です。これは、Xterm、Unicode RXVT、Linuxカーネルに組み込まれているターミナルエミュレータ、またはFreeBSDコンソールでは表示されません。
一般的に起こることはこれです。
クリアコード> コマンドはterminfo/termcapを調べ、適切な制御シーケンスを発行します。
- terminfo/termcapエントリに
E3
がある場合 機能それ、それは最初にそれを書きます。これにより、制御シーケンスが発行され、スクロールバックバッファがクリアされます。これとその背後にある歴史は、clear
のDickeyncursesのマニュアルページに詳細に記載されています。 コマンド。 - 次に、
clear
を使用します 表示されている画面をクリアする機能。
- terminfo/termcapエントリに
- terminfo / termcapエントリの制御シーケンスは、端末タイプによって決定されます。ただし、FormFeedを使用して画面をクリアする(現在はまれな)端末(DEC VTとその模倣者は使用しません)を除いて、それらは単なる古いECMA-48制御シーケンスまたはその拡張のいずれかです。例:
パテ
エントリはE3=E [3J
を定義します これはXterm拡張制御シーケンスです。- NetBSDコンソールの
pcvtxx
エントリは、clear =E [HE [J
を定義する多くのエントリの1つです。 または同様のもの。これは2つの通常のECMA-48制御シーケンスです。
- ターミナルエミュレータは、制御シーケンスに基づいて動作します。 ECMA-48とそのXterm拡張で定義されているように:
- CSI
H
(CUP)カーソルをホームにします。 - CSI
J
(ED 0)または単にCSIJ
現在のカーソル位置から画面の最後まで消去します。 - CSI
2
J
(ED 2)画面全体を消去します。 - CSI
3
J
(ED 3)スクロールバックバッファを消去します。
- CSI
特にGNOMEターミナルに関しては:
- 端末タイプは適切に
gnome
、しかし、誤ってxterm
に設定したままにしておく人もいます 。 -
gnome
terminfoエントリはE3
を定義していません 機能、そして多くのシステムで—それでも! —xterm
も同様です これはDickeyterminfoから浸透していないためエントリ。したがって、clear
clear
の内容を書き出すだけです 機能。 -
clear
の内容 これらのterminfoエントリの機能は、カーソルをホームに移動してから画面全体を消去する制御シーケンスです。 - ただし、GNOMEターミナルは画面全体の消去を正しく実装していません。 より具体的には、それが基づいているライブラリlibvteは、その
VteTerminalPrivate ::seq_clear_screen()
のコードではそれを行いません。 働き。むしろ、libvteは画面全体をスクロールして、画面全体に相当する空白行を表示し、カーソル位置をそれらの空白行の最初の行に移動します。
これが、あなたが見ているものを見る理由です。 libvteは、指示されたときに画面全体を消去していません。むしろ、質問者がここで行ったことを正確に実行するまで、表面的にはそれに似た何かを実行しています。ターミナルウィンドウをスクロールして戻し、スクロールバックバッファを確認します。その場合、違いは明白です。
XtermやUnicodeRXVTなどの他のターミナルエミュレータでは、ED 2制御シーケンスは実際に画面を消去し、画面上のすべての位置を上から下に消去し、スクロールバックバッファを変更しません。ただし、libvteターミナルエミュレータでは、現在の画面をスクロールバックバッファにプッシュし、画面に相当する空白行を追加するだけです。前の画面の内容は消去されませんが、スクロールバックバッファに移動されます。
そして、 clear
を実行すると コマンドを2回実行すると、2つが追加されます 画面の空白行に相当します。スクロールバックバッファが十分に大きい場合は、まだ 元の画面の内容を見つけて、スクロールバックバッファのさらに上に移動します。
さらに読む
- コード化された文字セットの制御機能 。 ECMA-48。 1976年。
- George Kirilov(2007-12-30)。 Ctrl-Lはスクロールバックバッファに空白を追加します 。 GNOMEバグ#506438。
- VT100に基づくxterm、xterm-color、およびlinuxターミナルエミュレーターはどの程度ですか?
- 「古い」スクロールバックバッファをクリアする
- Bashclearコマンドの奇妙な動作によりスクロールバックバッファが削除されます。
- https://superuser.com/questions/1094599/
- トーマスディッキー(2018)。 「XTermとLook-alikesの既知のバグ:GNOMEターミナル」。 XTermのよくある質問 。 invisible-island.net。
- トーマスディッキー(2018)。 「XTermとLook-alikesの既知のバグ:VTEに関する注意」。 XTermのよくある質問 。 invisible-island.net。