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

Posted

技术标签:

【中文标题】如何在 Mac OS X 的终端中清除以前的输出?【英文标题】:How can I clear previous output in Terminal in Mac OS X? 【发布时间】:2011-01-12 23:48:51 【问题描述】:

我知道“清除”当前屏幕的 clear 命令,但它只是通过打印大量换行符来做到这一点 - 清除的内容只是向上滚动。

有没有办法彻底清除终端之前的所有输出,这样即使向上滚动也无法访问它?

【问题讨论】:

你有没有找到一种在 shell 脚本中工作的方法? @ZevEisenberg 我不这么认为。无论如何,现在我想我根本不需要这个。我对Command+K很满意。 @ZevEisenberg 我的更新答案(和另一个答案)向您展示了如何从脚本中做到这一点。 见apple.stackexchange.com/questions/31872/… 【参考方案1】:

手动清除终端:

+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 可以吗?如果有,请告诉我! 嗯,是的,但请参阅下文 (***.com/a/26615036/558639) 以获得更好的方法。 如果不小心按了这个,怎么查看清除的缓冲区呢? @JoshPinter,只是不要意外按下它。 :) (考虑在所有情况下使用clear除了您需要回滚历史实际消失的情况,例如当您要打印时。) @Wildcard 够公平的。 :) 关于使用 clear 的好建议。不过,我觉得它们应该颠倒过来。输入 clear 似乎比点击 Command + K 更有意。【参考方案2】:

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

如果您使用的是 OS X 终端应用程序(如 OP 所述),更好的方法(感谢 Chris Page's answer to How do I reset the scrollback in the terminal via a shell command?)就是这样:

clear && printf '\e[3J'

或更简洁的(hat tip to user qiuyi):

printf '\33c\e[3J'

清除回滚缓冲区和屏幕。还有其他选择。请参阅Chris Page's answer to How do I reset the scrollback in the terminal via a shell command? 了解更多信息。

原答案

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

您可以通过优化 AppleScript 来避免这种情况,只在屏幕位于最前面时才清除屏幕(取自 MattiSG's answer to How do I reset the scrollback in the terminal via a shell command?):

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

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

【讨论】:

我在.bash_profile 中使用了“更好的方法”,这太棒了,因为有时在打开新的终端窗口时,我不再出现错误的缓冲区。 这是概念上最正确的答案。 qiuyi 的回答以牺牲一点可读性为代价避免了 && 。如果可以扩展 Alok 的答案以清除正在运行当前脚本的终端,那将是一个改进,但这更简单。 这对脚本编写来说更好。非常感谢! 当您通过 ssh 连接到其他系统时,这非常适合,谢谢! 我无法用.inputrc 弄清楚,但这在我的.bash_profile 中有效:bind '"\C-k": "printf \\\\33c\\\\e[3;\n"'【参考方案3】:

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

【讨论】:

这是最好的方法。我们应该定义像alias cls='printf "\33c\e[3J"'这样的别名 谢谢,这正是我需要的。 也可以在 iTerm2 中使用 @LoïcFaure-Lacroix, \33c 执行与clear 命令等效的命令,它基本上只是滚动屏幕直到您看不到它之前的内容。它会清除屏幕,但不会清除回滚缓冲区(即您仍然可以使用滚动条查看旧输出)。添加\e[3J 以实际清除回滚缓冲区。 @EirNym,在~/.profile(或系统范围的/etc/profile)中添加function cls printf '\33c\e[3J\33c' 行。这应该适用于 macOS、FreeBSD、Linux 等桌面环境。注意额外的 \33c 用于清除非 macOS 中额外的 \e[3J 文字(基本上对于 Linux/FreeBSD,我们只需要 printf '\33c')。跨度> 【参考方案4】:

把它放在你的 .bash_profile.bashrc 文件中:

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

【讨论】:

这应该是正确的答案。 AppleScript 可能很乱,但是,嘿,完成了工作。谢谢。 已投票,但另一个答案指出这会清除所有窗口! 这个答案在大苏尔仍然很有效!它清除当前终端选项卡的输出(其他窗口/选项卡不清除)【参考方案5】:

仅删除最后一个输出:

+ L

彻底清除终端:

+ K

【讨论】:

有没有办法清除屏幕,但如果我向上滚动屏幕,输入仍然存在?【参考方案6】:

在 Mac OS X 终端上,此功能已内置到终端应用程序中,菜单 ViewClear Scrollback(默认为 CMD + K).

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

我不确定您将如何在脚本中使用它(也许 AppleScript 正如其他人所指出的那样)。

【讨论】:

从 Yosemite (10.10) 开始,View->Clear Scrollback 不再出现在终端的菜单中。不过,键盘快捷键 CMD + K 仍然有效。 @NicolasMiari 看起来 Clear Scrollback 刚刚在优胜美地从 View 移动到 Edit【参考方案7】:

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

【讨论】:

【参考方案8】:

或者您可以通过按 Ctrl + L 发送page break(ASCII 换页)。

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

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

【讨论】:

清除屏幕但保持回滚缓冲区完好无损。 如果想用cmd+f举例就不一样了【参考方案9】:

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

要清除输入的文本,首先用 Command + A 向左跳转,然后用 Control + 清除指针右侧的文本K.

视觉示例:

【讨论】:

【参考方案10】:
clear && printf '\e[3J'

清除所有内容,它在 OS X 上也能正常工作。非常整洁。

【讨论】:

漂亮,我只是在使用clear,当您向上滚动时会留下一些东西。没有了!【参考方案11】:

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

清除上一个标记:Command + L

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

清除开始:Command + K

【讨论】:

【参考方案12】:

我无法获得任何以前的答案(在 macOS 上)。

一个组合对我有用 -

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

这会清除缓冲区和屏幕。

【讨论】:

什么是 IO.write?我必须用 printf 替换它才能正常工作。不管怎么说,还是要谢谢你。这个最适合我 我不确定我为什么选择IO.write。它应该可以工作,但是您决定将这些字符打印到终端。【参考方案13】:

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

history -c

【讨论】:

确实如此。 @phil 它是从磁盘上永久删除它们,还是仍然可以通过某种方式检索它们? 基本上它会删除文件~/.bash_history,所以如果你能恢复它,你就可以恢复已经被清除的命令 不,它不起作用。向上滚动的历史仍然存在,我可以向上滚动再次查看它们。 不是问的。这会清除历史记录,而不是当前缓冲区,这是两个截然不同的东西。 不是问什么,有害;我只是被这个咬了,我的历史包含了重要的东西。【参考方案14】:

CMD + K 适用于 macOS。它清除了整个终端输出,但环境仍然存在。

【讨论】:

这与 8 年前被接受的答案相同。

以上是关于如何在 Mac OS X 的终端中清除以前的输出?的主要内容,如果未能解决你的问题,请参考以下文章

在 mac OS X 上关闭 GUI emacsclient 后如何将焦点返回到终端?

sh 如何杀死mac os x终端上的端口

sh 如何杀死mac os x终端上的端口

如何在 Mac OS X 终端上使用 make 编译 C 程序

Mac OS X Terminal 101:终端使用初级教程

如何在 Mac OS X 10.6 中发出硬件哔声