如何在 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 终端上,此功能已内置到终端应用程序中,菜单 View → Clear 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 后如何将焦点返回到终端?
如何在 Mac OS X 终端上使用 make 编译 C 程序