「前」スクロールバックバッファをクリア

「前」スクロールバックバッファをクリア

重複した質問のようですが、そうではありません。

「現在の」セッションのスクロールバックバッファをクリアするために使用できることを知っていますが、printf "\033f"以前のセッションでは機能しません。

私の問題は、XVPビューア(VNCベースのJava Webブラウザ)を介して複数の仮想マシンにアクセスしてログアウトする前に画面を消去しようとしない限り、画面をスクロールしてすべてを見ることができることです。

この古いスクロールバックバッファを消去する方法を提案してください。

PS:再起動するとクリアされますが、本番VMでは実行できません。

答え1

Linuxカーネルは(少なくとも2011年)から数行をスキップするのではなく、ロールバックをクリアする制御シーケンスをサポートしてきました。

printf '\033[3J'

ncursesの変更で言及2011年7月16日:

    + add E3 extended capability to linux-basic (Miroslav Lichvar)
    + add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD

そして説明した端末データベース:

# The 3.0 kernel adds support for clearing scrollback buffer (capability E3).
# It is the same as xterm's erase-saved-lines feature.
linux3.0|linux 3.0 kernels,
        E3=\E[3J, use=linux2.6,

これは、1999年6月にxtermに追加された機能がLinuxコンソールでアプリケーションのセキュリティを向上させるのに役立つというバグレポートに記載されています。

その後(2013年)、(使用されている端末の説明に従って)ユーティリティがロールバックをクリアできるように、ユーティリティがユーティリティに追加されE3ました。clear~についてCtrl+l同じエスケープシーケンスがハードコードされている可能性があるbashショートカットを参照します(ターミナルデータベースがclear(またはed)とE3機能を一緒にバインドしないため)。

追加資料:

答え2

私はこれを行う別の方法を見つけました。デフォルトでは、コンソール画面には510個のラインバッファ(私の場合)があるため、echo511番を入力するとその行がすべて埋められ、古いデータが消去されます。

echoループ内で使用します。for

for i in {0..510}
 do
    echo
 done

以前のbashプロンプトでseq機能します。

for i in `seq 0 510`
 do
    echo
 done

関連情報