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

Eon*_*nil 484 macos shell buffer clear

我知道clear'清除'当前屏幕的命令,但它只是通过打印许多换行来实现这一点 - 清除的内容只是向上滚动.

有没有办法彻底擦除终端的所有先前输出,以便即使向上滚动也无法到达它?

Alo*_*hal 1010

要手动清除终端:

+K

Command+ K用于较新的键盘

从shell脚本中清除终端;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
Run Code Online (Sandbox Code Playgroud)

  • 如果你不小心按了这个,怎么会去查看清除的缓冲区? (9认同)
  • @JoshPinter,不要意外按下它.:)(考虑对所有情况使用`clear`*除了*,你需要回滚历史记录才能真正消失,例如当你打算打印时.) (4认同)
  • @Wildcard公平。:)使用`clear`的好建议。我觉得他们应该被扭转。键入clear似乎比按Command + K更有意图。 (2认同)

fea*_*ool 77

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

如果您正在使用OSX终端应用程序(如OP所述),更好的方法(感谢https://apple.stackexchange.com/a/113168)就是这样:

clear && printf '\e[3J'
Run Code Online (Sandbox Code Playgroud)

它会清除回滚缓冲区.它比运行AppleScript更快.还有其他选项,请参阅https://apple.stackexchange.com/a/113168以获取更多信息.

原始答案

此线程中给出的AppleScript答案有效,但它具有清除碰巧活动的任何终端窗口的令人讨厌的副作用.如果您在一个窗口中运行脚本并尝试在另一个窗口中完成工作,那么这是令人惊讶的!

您可以通过优化AppleScript来清除屏幕(如果它位于最前面)(请参阅https://apple.stackexchange.com/a/31887):

printf '\33c\e[3J'
Run Code Online (Sandbox Code Playgroud)

...但是当它不是当前窗口时,输出将叠加,直到它再次变为当前,这可能不是你想要的.


小智 46

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

  • 这是最好的方法.我们应该定义别名,例如`alias cls ='printf"\ 33c\e [3J"'` (3认同)
  • 对我来说,`\ 33c`足以完成工作. (2认同)
  • @LoïcFaure-Lacroix,`\33c` 执行等效于 `clear` 命令,它基本上只是滚动屏幕,直到你看不到它以前的内容。它会清除屏幕,但不会清除回滚缓冲区(即您仍然可以使用滚动条查看旧输出)。添加 `\e[3J` 以实际清除回滚缓冲区。 (2认同)

Rob*_*Jr. 33

把它放在.bash_profile或.bashrc中

function cls { 
osascript -e 'tell application "System Events" to keystroke "k" using command down' 
}
Run Code Online (Sandbox Code Playgroud)


小智 19

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

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

不确定如何在脚本中使用它(可能是其他人指出的AppleScript).

  • @NicolasMiari 看起来像 Yosemite 中的“Clear Scrollback”刚刚从“View”移动到“Edit”。 (2认同)

Ama*_*ain 18

仅删除最后一个输出:

? + L

要完全清除终端:

? + K


Dav*_* J. 10

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


小智 8

或者您可以按下以下命令发送分页符(ASCII换页):

CTRL+L
Run Code Online (Sandbox Code Playgroud)

虽然这在技术上只是开始一个新页面,但它具有与所有其他方法相同的净效果,同时速度更快(当然除了Apple + K解决方案).

因为这是一个ASCII控制命令,它适用于所有shell.


Pun*_*rud 7

Command+K将清除以前的输出。

要清除输入的文本,第一跳留下Command+ A,然后清除文本与指针右边Control+ K

视觉示例:

在此处输入图片说明


jee*_*bda 5

clear && printf '\e[3J'
Run Code Online (Sandbox Code Playgroud)

清除所有内容,在osX上也能很好地工作。非常整洁


Vit*_*cas 5

做正确的事;做正确的事!

清除上一个标记:Command+L

清除上一个书签:Option + Command+L

清除开始:Command+K