如何清除Mac OS X中的terminal输出?

我知道“清除”当前屏幕的clear命令,但是这只是通过打印大量换行符来完成的 – 清除的内容只是滚动而已。

是否有办法彻底清除terminal上的所有输出,以至于即使通过滚动,我也无法达到它?

手动清除terminal:

+ K

Command + K用于较新的键盘

从shell脚本中清除terminal;

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

更好的方法

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

 clear && printf '\e[3J' 

清除回滚缓冲区。 这比运行AppleScript更快。 还有其他选项,请参阅https://apple.stackexchange.com/a/113168了解更多信息。;

原来的答案

在这个线程给出的AppleScript答案的作品,但它有清除ANYterminal窗口碰巧是积极的讨厌的副作用。 如果您在一个窗口中运行脚本并尝试在另一个窗口中完成工作,这是令人惊讶的!

你可以通过改进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' 

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

把它放在.bash_profile或.bashrc中

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

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

在Mac OS Xterminal上,该function已经内置到terminal应用程序中,如View->Clear Scrollback (默认为CMD + K )。

所以你可以重新分配这个苹果的键盘快捷键喜欢你喜欢。 只需使用“Clear Scrollback”命令为terminal添加一个新的快捷方式。 (我使用CMD + L ,因为它类似于CTRL + L来清除当前屏幕内容,而不清除缓冲区。)

不知道你将如何在脚本中使用它(可能是别人指出的AppleScript)。

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

在terminal:历史-c

或者你可以通过按下来发送一个分页符 (ASCII表单提要):

 CTRL+L 

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

而且因为这是一个ASCII控制命令,所以它可以在所有shell中运行。

 clear && printf '\e[3J' 

清除所有内容,在osX上运行良好。 井井有条

我无法得到任何上述工作(在macOS上)。

一个组合为我工作 –

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

这将清除缓冲区和屏幕