如何在Mac OS X的终端中清除以前的输出?


523

我知道clear可以“清除”当前屏幕的命令,但是它只是通过打印许多换行符来完成的-清除的内容只是向上滚动。

有没有办法完全清除终端上所有以前的输出,以便即使向上滚动也无法到达?


1
您是否找到了可以在Shell脚本中运行的方法?
Zev Eisenberg 2014年

7
@ZevEisenberg我不这么认为。无论如何,现在我想我根本不需要这个。我很满意Command+K
Eonil 2014年

@ZevEisenberg我最新的答案(以及另一个答案)向您展示了如何通过脚本进行操作。
Alok Singhal 2014年

Answers:


1098

要手动清除终端:

+K

Command+ K适用于较新的键盘

从shell脚本中清除终端;

/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可以做到吗?如果有,请告诉我!
2014年

是的,但是,请参阅下面的内容(stackoverflow.com/a/26615036/558639),以获取更好的方法。
fearless_fool14年

9
如果您不小心按下了此按钮,将如何查看已清除的缓冲区?
约书亚·品特

4
@JoshPinter,请不要误按它。:)(考虑使用clear所有情况,除非您需要回滚历史记录实际消失,例如要打印时。)
通配符

2
@Wildcard足够公平。:)使用上的好建议clear。我觉得他们应该被扭转。打字clear似乎比敲击更有意Command + K
Joshua Pinter

85

从脚本中清除屏幕的更好方法...

如果您使用的是OSX Terminal应用程序(如OP所述),则更好的方法(感谢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
这是最正确的答案。秋衣的答案避免了&&牺牲可读性。如果可以扩展Alok的答案以清除正在运行当前脚本的终端,那将是一个改进,但是更简单。
扎克·莫里斯

1
对于脚本编写来说,这是更好的方法。谢谢一群!
安迪

非常适合当您使用其他系统时,谢谢!
JBRWilkinson '18

48

漂亮的方法是 printf '\33c\e[3J'


3
这是最好的方法。我们应该定义别名,例如alias cls='printf "\33c\e[3J"'
mpyw

谢谢,这正是我所需要的。
GigaBass

在iTerm2中也可以使用
Anders Zommarin,

1
@LoïcFaure-Lacroix \33c执行与clear命令等效的命令,该命令基本上只是滚动屏幕,直到看不到它的先前内容为止。它会清除屏幕,但不会清除后退缓冲区(即,您仍然可以使用滚动条查看旧的输出)。添加\e[3J以实际清除向后滚动缓冲区。
luiss

@EirNym,function cls { printf '\33c\e[3J\33c' }~/.profile(或系统范围内/etc/profile)添加行。这应该适用于macOS,FreeBSD,Linux等中的桌面环境。请注意,这\33c是用于清除\e[3J非macOS中的多余文字(基本上对于Linux / FreeBSD,我们只需要printf '\33c')。
vulcan raven


20

在Mac OS X终端上,此功能已作为View->Clear Scrollback(默认为CMD+ K)内置到终端应用程序中。

因此,您可以根据需要使用Apple的Keyboard快捷键重新分配它。只需使用“ Clear Scrollback”命令为Terminal添加新的快捷方式。(我使用CMD+ L,因为它类似于CTRL+,L以清除当前屏幕内容,而不清除缓冲区。)

不知道如何在脚本中使用它(也许就像其他人指出的那样是AppleScript)。


1
从优胜美地(10.10)开始,View->Clear Scrollback在终端的菜单中不再存在。键盘快捷键CMD+ K仍然可以使用。
Nicolas Miari

1
@NicolasMiari看起来像Clear Scrollback从刚搬到ViewEdit优胜美地。
BrainSteel

10

在Mac OS X Yosemite(10.10)中,用于Option + Command + K清除Terminal.app中的回滚。


9

或者您可以发送一个 分页符(ASCII格式的提要):

CTRL+L

尽管从技术上讲,这只是开始一个新页面,但这与所有其他方法具有相同的净效果,但速度要快得多(当然,Apple + K解决方案除外)。

并且由于这是ASCII控制命令,因此它适用于所有shell。


1
这将清除屏幕,但保留回滚缓冲区。
乔治,

如果要使用cmd + f作为
示例,则不一样


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

1
我不确定为什么选择IO.write。它应该工作相同,但是您决定将这些字符打印到终端上。
Michael Baldry

1

在终端中键入以下内容将清除您的历史记录(意味着使用向上箭头将无助您)-但不会清除屏幕:

history -c

是的 @phil会将它们从磁盘上永久删除,还是仍然可以通过某种方式检索?
史蒂文·罗斯

基本上,它会删除〜/ .bash_history文件,因此,如果可以恢复该文件,则可以恢复已清除的命令
Ryan Pendleton

不,这是行不通的。向上滚动的历史记录仍然存在,我可以向上滚动以再次查看它们。
Eonil 2012年

26
没有问什么。这将清除历史记录,而不是当前缓冲区,这是两个截然不同的事情。
肖恩·卡梅伦

1
不是问什么,而是有害的;我只是被这个咬住了,我的历史包含了很多重要的东西。
Elazar

0

如果您不希望使用过滤器,那么请尝试此操作

adb -d shell dumpsys活动| grep ActivityRecord


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.