実際に端末画面をクリアする


382

clear端末でコマンドを使用しても、画面がクリアされたとユーザーをだますだけです...マウスを使用してスクロールすると、以前のコマンドからの出力が引き続き表示されます。テキストの津波に溺れているとき、これは人生を困難にします。

インターネット上で見つけることができるさまざまなソリューション(エスケープコードなど)は、clearコマンドがすでに行っていることのバリエーションにすぎません。

では、Linuxで実際に端末のコンテンツをクリアするにはどうすればよいのでしょうか。


44
私はこれを「プログラマーが一般的に使用するソフトウェアツール」(FAQで有効とされている)として分類します。
Autodidact 2011年

5
あなたが本当に求めているのは、「端末のスクロールバックバッファをクリアするにはどうすればよいですか?」シェル(Bash)やUbuntuから独立しています。
追って通知があるまで一時停止。

@ spiderplant0は、おそらくAskUbuntuがこのための適切な場所にあるためです-現時点では。これが要求されたときは存在しなかったため、そうではないにせよ、話題から外れました。
jcollum 2013年

1
これはより一般的な質問であり、@ Dennisが指摘したように、Ubuntuやbashだけでなく、私は「Ubuntu bash画面を実際にクリアする」というトピックを変更します->「端末画面を実際にクリアする」
Ra_

Bashを実行できるさまざまな端末タイプがあります(「bash端末」という用語は無意味です)。「クリア」はそれらすべてに適用できるわけではありません-時々、最も近い近似は、紙を引き裂き、不要なビットをビン/細断/書き込み/破棄することです。
Toby Speight 2018

回答:


500

単に新しい行を追加するのではなく、次のコマンドを使用して画面をクリアします...

printf "\033c"

はい、それはbashプロンプトの「printf」です。

あなたはおそらくエイリアスを定義したいと思うでしょう...

alias cls='printf "\033c"'

説明

\033 == \x1B == 27 == ESC

したがって、<ESC>cこれは、端末をリセットするためのVT100エスケープコードになります。端末エスケープコードの詳細を次に示します。

編集する

これを行う他のいくつかの方法を次に示します...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

上記はKDEコンソール(Konsoleと呼ばれます)では動作しませんが、期待はあります!次の一連のコマンドを使用して、画面とスクロールバックバッファをクリアします...

clear && echo -en "\e[3J"

または、KDEで次のエイリアスを使用することもできます...

alias cls='clear && echo -en "\e[3J"'

ここからスクロールバッククリアコマンドを受け取りました。


4
これは実際には端末固有です。"\033c"であるESC c「フルリセット(RIS)」のVT-XXXのエスケープシーケンスです。最近人々が実際に使用しているほとんどすべての端末はVT互換ですが、奇妙な端末を使用していることに気付いた場合、これは機能しない可能性があります。@ vpit3833の回答は、TERMが正しく設定されていると仮定すると機能する可能性が高くなります。
Laurence Gonsalves

2
printfはBashビルトインです(これも別個のバイナリであることは事実ですが、ビルトインが優先され、ほとんどの最新のシェルはそうですprintf)。
追って通知があるまで一時停止。

2
@ SDX2000 OK ... Ubuntuを指定したことはわかっていますが、これらはすべての「最新の」ターミナルエミュレータで同様に動作すると想定しました。私は最初にMACの端末でテストしましたが、そこではリセットされませんでしたが、Centos Linuxではリセットされました。
2011年

12
echo -en "\ 033c"
Jonathon Reinhart

2
数年後0.02ドルですが、私はCUの学生です。私のオペレーティングシステムの教授に尋ねると、これはANSIエスケープシーケンスの例であると言いました:en.wikipedia.org/wiki/ANSI_escape_codeこれはインバンドシグナリングの例です。
abgordon 2016

216

お試しくださいreset。端末画面をクリアしますが、前のコマンドには矢印またはキーバインドを使用してアクセスできます。


3
ありがとう!しかし、それはプロンプトを含むすべてのものをクリアします。これを行わない解決策については私の答えを参照してください。
Autodidact 2011年

5
@ SDX2000どちらもプロンプトをクリアし、シェルは新しいプロンプトを生成します。リセットの欠点の1つは、少し遅いようです(おそらく、ESC cを出力するだけではないためです)が、移植性は高くなります。
Laurence Gonsalves

@Laurence明確化に感謝...リセットを試みましたが、非常に遅いため、プロンプトが他のすべてとともにクリアされたと思いました。私はESC cおそらくUbuntuが使用する以外の端末を使用することはないので、使用することを好みます。resetシリアルポートなどを介してリモートマシンをデバッグしているときにいつか重宝するかもしれませんが
Autodidact

1
@ SDX2000リセットは、何かを殺した(またはバイナリファイルをカットした)ためにターミナルがひどく壊れてしまい、用語が壊れた状態のままになった場合にも便利です。プロンプトは表示されるが入力はできない状態になり、Enterキーを押すと、新しいプロンプトが下ではなく前のプロンプトの横に表示されますか?リセットはそれを修正します。実際に使用するのはこれだけです...スクロールバックバッファをクリアする必要性や要望はありませんでした。
Laurence Gonsalves '20年

4
それに伴う1秒の遅延resetは、私には耐えられません。
Jonathon Reinhart 2016年

62
tput reset

それでうまくいきます!


2
plainよりもはるかに高速に実行されますresetが、それでも機能します!
Ponkadoodle、2015

1
単なるより高速 reset
l2aelba

これは常にそれをカットしたわけではありませんが、tput clearはカットしました
InterLinked

7

私が読んだ回答がPuTTYで機能しなかったため、この記事にコメントを見つけました。

接続の設定の「ウィンドウ->動作」で、「ALTだけでシステムメニューが表示される」という設定が見つかります。次に、CTRL + L、ALT、l(小文字のL)で画面がスクロールされ、スクロールバックバッファがクリアされます。

(私はUbuntuサーバーに接続しているのでOPに関連していますが、サーバーが実行しているものに関係なく、明らかに関連しています。)


@Dennis Williamsonからの3年前のコメントが私をこの答えに導いてくれました。
TecBrat 14

また、パテの「ウィンドウ」の設定にあなたが急速に行うことができ、「ALT-空間上のシステムメニューが表示されますが、」活性化したこと与えられCTRL+L、その後ALT+SpaceUターミナルウィンドウは、その後、本物のためのスクロールをリセットする最初のクリア。
Pierre Voisin 2017

6

次のリンクでは、そのエイリアスを永続的にする方法を説明しているので、入力し続ける必要はありません。

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

これらはそのリンクで詳述されているステップです。

  1. vim〜/ .bashrcまたはgedit〜/ .bashrcまたはこれまでに好きなテキストエディター
  2. エイリアスcls = 'printf "\ 033c"'をファイルの下部に配置します
  3. 保存して終了
  4. 。〜/ .bashrc(そしてはい、。と〜の間にスペースが必要です)
  5. すべてが機能したかどうかを確認してください!

私はこの情報を単に渡すだけで信用しません。



4

このための私の人間に優しいコマンドは次のとおりです。

reset

xtermおよびVT100でテスト済み。また、プログラムの異常終了後にも役立ちます。コマンドバッファを保持するため、上矢印は前のコマンドを循環します。

乾杯:D


3

新しい行の印刷を使用するソリューションはあまりサポートされていないことを知っていますが、他のすべてが失敗した場合は、どうしてですか?特に、誰かが画面を見ることができる可能性があるが、キーログを行うことができない環境で動作している場合。その場合の1つの解決策は、次のエイリアスです。

alias c="printf '\r\n%.0s' {1..50}"

次に、画面の現在のコンテンツを「クリア」する(または非表示にする)にc+Enterは、ターミナルで入力します。


2

そのtmuxスクロールバッファを追加するだけではclearresetまたはでクリアされませんprintf。あなたがする必要があり:clear-historyます。リンクを参照してください


-2
echo -e "\e[3J"

これはLinuxマシンで動作します


5
回答ありがとうございますが、他の回答に加えて付加価値を提供する方がよいでしょう。この場合、別のユーザーが既にそのソリューションを投稿しているため、あなたの答えは追加の価値を提供しません。以前の回答が参考になった場合は、同じ情報を繰り返すのではなく、投票してください。
Toby Speight 2018

-53

このアプリをコンパイルします。

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}

33
申し訳ありませんが、これは最善の解決策ではありません。999改行を出力するよりも優れた方法があります
pbfy0

2
これには実際にはいくつかの価値があります。一部の端末では、他の方法で画面をクリアすると履歴が消去され、スクロールして戻ることができなくなります... 999行では、指が疲れます。情けない奴や。
JoshuaDavid

@JoshuaDavid質問の要点は、OPがクリア後​​にスクロールできないようにしたくないということでした。
Socowi、2018年

@Socowi私のコメントはOPではなく、この-50の低評価の回答を対象としています。しかし、あなたは正しいです!
JoshuaDavid
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.