Mac OS Xのターミナルで以前の出力をクリアする方法は?


523

clearは現在の画面を「クリア」するコマンドを知っていますが、それはたくさんの改行を印刷するだけでこれを行います-クリアされたコンテンツは上にスクロールされます。

上にスクロールしてもアクセスできないように、ターミナルからの以前の出力をすべて完全に消去する方法はありますか?


1
シェルスクリプトで機能する方法を見つけたことがありますか?
Zev Eisenberg 2014年

7
@ZevEisenberg私はそうは思いません。とにかく、今は全然必要ないと思います。私は満足していCommand+Kます。
Eonil 2014年

@ZevEisenberg私の更新された回答(および他の1つの回答)は、スクリプトからそれを行う方法を示しています。
Alok Singhal 2014

回答:


1099

端末を手動でクリアするには:

+K

Command+ K新しいキーボード用

シェルスクリプト内からターミナルをクリアするには、

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

@fearless_fool apple.stackexchange.com/a/31887はそれを行うかもしれませんか?もしそうなら、私に知らせてください!
Alok Singhal 2014年

ええ、そうですが、より良い方法については、以下(stackoverflow.com/a/26615036/558639)を参照してください。
fearless_fool

9
誤ってこれを押してしまった場合、クリアされたバッファを表示するにはどうしたらよいでしょうか?
Joshua Pinter、2014年

4
@JoshPinter、誤って押してはいけません。:)(たとえば、印刷する場合など、スクロールバック履歴を実際に表示しないようにする必要がclearある場合を除いて、すべての場合に使用すること検討してください。)
ワイルドカード

2
@ワイルドカード十分に公正。:)の使用に関する良いアドバイスclear。でも、逆にすべきだと思います。タイピングclearは打つよりも意図的なようCommand + Kです。
Joshua Pinter 2016年

85

スクリプト内から画面をクリアするより良い方法...

(OPで述べられているように)OSXターミナルアプリを使用している場合、より良いアプローチ(https://apple.stackexchange.com/a/113168のおかげ)は次のとおりです。

clear && printf '\e[3J'

より簡潔に(https://stackoverflow.com/users/4834046/qiuyiへのヒント):

printf '\33c\e[3J'

スクロールバックバッファと画面をクリアします。他のオプションもあります。詳細については、https://apple.stackexchange.com/a/113168を参照してください。

元の答え

このスレッドで与えられたAppleScriptの答えは機能しますが、たまたまアクティブになっているすべての端末ウィンドウをクリアするという厄介な副作用があります。あるウィンドウでスクリプトを実行していて、別のウィンドウで作業を実行しようとしている場合、これは驚くべきことです。

これを回避するには、AppleScriptを調整して画面が一番手前にある場合にのみ画面をクリアします(https://apple.stackexchange.com/a/31887から取得)。

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

...しかし、それが現在のウィンドウではない場合と同様に、出力が再び最新になるまで積み重ねられますが、これはおそらく望んでいるものではありません。


1
私は「より良い方法」を使用しましたが.bash_profile、新しいターミナルウィンドウを開いたときにグリッチバッファが表示されなくなることがあるので、すばらしい方法です。
Patrick Roberts

1
これが最も概念的に正しい答えです。qiuyiの答えは、読みやすさを犠牲にして&&を回避しています。Alokの回答を拡張して、現在のスクリプトを実行している端末をクリアすることができれば、改善になるでしょうが、これはもっと簡単です。
ザックモリス

1
これは、スクリプトに適しています。本当にありがとう!
アンディ

これは、他のシステムにSSHで接続する場合に最適です。
JBRウィルキンソン2018

48

かわいい方法は printf '\33c\e[3J'


3
これが最良の方法です。次のようなエイリアスを定義する必要がありますalias cls='printf "\33c\e[3J"'
mpyw

ありがとう、これはまさに私が必要としたものです。
GigaBass

iTerm2でも動作します
Anders Zommarin 2017年

1
@LoïcFaure-Lacroixは、以前のコンテンツが表示されなくなるまで画面をスクロールするだけのコマンドと\33c同等のclearコマンドを実行します。画面はクリアされますが、スクロールバックバッファはクリアされません(つまり、スクロールバーを使用して古い出力を表示できます)。を追加して\e[3J、実際にスクロールバックバッファをクリアします。
luiss

@EirNym、function cls { printf '\33c\e[3J\33c' }行を追加します~/.profile(またはシステム全体/etc/profile)。これは、macOS、FreeBSD、Linuxなどのデスクトップ環境で機能するはずです。extraは非macOSで\33c追加の\e[3Jリテラルをクリアするためのものです(基本的にLinux / FreeBSDの場合、必要なのはだけですprintf '\33c')。
バルカンレイヴン

33

これを.bash_profileまたは.bashrcに入れてください

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}

これが正解です。AppleScriptは面倒かもしれませんが、ちょっと、仕事は完了です。ありがとう。
アランベリー2014

賛成票を投じていましたが、別の回答で、これによりすべてのウィンドウがクリアされることがわかりました!
マイケルブーシェ

20

Mac OS Xターミナルでは、この機能はすでにターミナルアプリケーションに組み込まれていますView->Clear Scrollback(デフォルトはCMD+ K)。

そのため、Appleのキーボードショートカットを使用して、これを好きなように割り当て直すことができます。「Clear Scrollback」コマンドを使用して、ターミナルの新しいショートカットを追加するだけです。(バッファをクリアせずに現在の画面コンテンツをクリアするのは+ に似ているため、CMD+ を使用します。)LCTRLL

これをスクリプトでどのように使用するかはわかりません(おそらく他の人が指摘したようにAppleScript)。


1
ヨセミテ(10.10)以降View->Clear Scrollback、ターミナルのメニューに表示されなくなりました。ただし、キーボードショートカットCMD+はK引き続き機能します。
Nicolas Miari

1
@NicolasMiari ヨセミテにClear Scrollback移動しViewましEditた。
BrainSteel、2015年

10

Mac OS X Yosemite(10.10)ではOption + Command + K、Terminal.appでスクロールバックをクリアするために使用します。


9

または、次のキーを押して改ページ(ASCIIフォームフィード)を送信できます。

CTRL+L

これは技術的には新しいページを開始するだけですが、他のすべての方法と同じ効果がありますが、はるかに高速です(もちろん、Apple + Kソリューションを除く)。

また、これはASCII制御コマンドであるため、すべてのシェルで機能します。


1
これにより画面はクリアされますが、スクロールバックバッファーはそのまま残ります。
ジョージ

例としてcmd + fを使用する場合は同じではありません
bormat


6

Command + Kは前の出力をクリアします

入力したテキストをクリアするには、まず「Command + A」で左にジャンプし、次に「Control + K」でポインタの右側のテキストをクリアします。

視覚的な例: ここに画像の説明を入力してください



5

正しいことをしてください、正しいことをしてください!

前のマークにクリア:Command-L

前のブックマークまでクリア:Option-Command-L

開始するにはクリア: Command-K

みんなを助けて!


1

上記のいずれも機能しません(macOS上)。

組み合わせは私のために働いた-

IO.write "\e[H\e[2J\e[3J"

これはバッファと画面をクリアします


IO.writeとは何ですか?これを機能させるには、printfに置き換える必要がありました。とにかくありがとう。これは私に最適です
Fitsyu 2018

1
なぜ選んだかわからないIO.write。同じように機能するはずですが、それらの文字を端末に出力することにしました。
Michael Baldry 2018

1

端末で次のように入力すると、履歴が消去されます(つまり、上矢印を使用しても何も起こりません)-画面はクリアされません。

history -c

します。@philはディスクから永久に削除しますか、それとも何らかの方法で取得できますか?
Steven Roose

基本的にそれはファイル〜/ .bash_historyを削除するので、それを回復できれば、クリアされたコマンドを回復できます
Ryan Pendleton

いいえ、機能しません。上にスクロールした履歴はまだ存在しており、上にスクロールして再び表示できます。
Eonil 2012

26
尋ねられたものではありません。これにより、現在のバッファではなく履歴がクリアされます。これは2つの非常に異なるものです。
Sean Cameron

1
尋ねられたものではなく、有害です。私はこれに噛まれたばかりで、私の歴史には重要なものが含まれていました。
Elazar

0

フィルタが必要な場合に出力に圧倒される場合は、これを試してください

adb -d shell dumpsysアクティビティ| grep ActivityRecord


-4

CMD + Kは私にとって常に機能しているようです。


2
これは、8年前に承認されたものと同じ答えです。
piksel bitworks
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.