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

问题描述 投票:478回答:15

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

是否有一种方法可以完全清除终端上的所有先前输出,以便即使向上滚动也无法到达它?

macos shell buffer clear
15个回答
995
投票

手动清除终端:

+ K

Command + K(对于较新的键盘)

要从shell脚本中清除终端;

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

3
投票

做正确的事,做正确的事!


2
投票

在终端中键入以下内容将擦除

您的历史记录(意味着使用向上箭头将不会给您任何帮助)-但不会清除屏幕:
history -c

1
投票

我无法在MacOS上执行上述任何操作。

一种组合对我有用-

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

0
投票

仅删除最后一个输出:

+ L

0
投票

您只需在cmd行中键入clear:]


-4
投票

CMD + K似乎一直在为我工作。


74
投票

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

如果您使用的是OSX终端应用程序(如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'

...但是当它不是当前窗口时,输出将堆叠起来直到再次变为当前窗口,这可能不是您想要的。


46
投票

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


33
投票

将其放入您的.bash_profile或.bashrc中

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

19
投票

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

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

不知道您将如何在脚本中使用它(也许其他人已经指出了AppleScript)。


10
投票

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


8
投票

或者您可以通过以下方式发送page break(ASCII格式的供稿):

CTRL+L

虽然从技术上讲这只是一个新页面,但是它具有与所有其他方法相同的净效果,但速度要快得多(当然,除了Apple + K解决方案之外,还可以。] >>

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


5
投票
clear && printf '\e[3J'

3
投票

Command + K

© www.soinside.com 2019 - 2024. All rights reserved.