清除终端屏幕的真实


382

使用clear终端上的命令只会使用户误以为屏幕已清除...当您使用鼠标滚动时,仍可以看到以前命令的输出。当您淹没在文本海啸中时,这将使生活变得困难。

可以在Internet上找到的各种解决方案(转义码等)只是clear命令已经完成的工作的变体。

那么,如何真正清除Linux中终端的内容呢?


44
我将其归类为“程序员常用的软件工具”(在FAQ中提及为有效)。
Autodidact'3

5
您真正要问的是“如何清除终端的回滚缓冲区?” 独立于Shell(Bash)或Ubuntu。
暂停,直到另行通知。

@ spiderplant0可能是因为AskUbuntu在此是正确的位置-此时。询问时不存在,因此即使不是这种情况,它也被关闭了。
jcollum 2013年

1
正如@Dennis指出的那样,这是一个更普遍的问题,不仅影响Ubuntu或bash。我将更改主题“清除真实的Ubuntu bash屏幕”->“清除真实的终端屏幕”
Ra_

您可以使用多种不同的终端类型来运行Bash(术语“ bash终端 ”是没有意义的)。“清除”不适用于所有对象-有时,最接近的近似方法是撕开纸张,然后将垃圾桶/切丝/烧伤/毁坏到您不需要的位置。
Toby Speight

Answers:


500

使用以下命令可以清晰显示屏幕,而不仅仅是添加新行...

printf "\033c"

是的,这是bash提示上的“ printf”。

您可能会想要定义一个别名...

alias cls='printf "\033c"'

说明

\033 == \x1B == 27 == ESC

因此,这<ESC>c就是用于重置终端的VT100转义代码。是有关终端转义码的更多信息。

编辑

还有其他几种方法...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

上面的方法在KDE控制台(称为Konsole)上不起作用,但是有希望!使用以下命令序列清除屏幕和向后滚动缓冲区...

clear && echo -en "\e[3J"

或者在KDE上使用以下别名...

alias cls='clear && echo -en "\e[3J"'

我从这里得到了回滚清除命令。


4
这实际上是特定于终端的。"\033c"ESC c它是“完全复位(RIS)”的VT-XXX转义序列。这些天人们实际使用的几乎所有终端都兼容VT,但是,如果您发现自己使用的是奇怪的终端,则可能无法正常工作。假设TERM设置正确,@ vpit3833的答案更有可能起作用。
Laurence Gonsalves

2
printf是Bash内置函数(确实它也是一个单独的二进制文件,但是内置函数具有优先级,大多数现代shell都有printf)。
暂停,直到另行通知。

2
@ SDX2000好吧……我知道您指定了Ubuntu,并且我假设它们在所有“现代”终端仿真器上的行为都相似。我最初在MAC终端上进行了测试,但没有在那进行重置,但在Centos Linux上进行了重置。
2011年

12
echo -en“ \ 033c”
Jonathon Reinhart

2
几年后$ 0.02,但我是CU的学生。问我的操作系统教授,他说这是ANSI转义序列的示例:en.wikipedia.org/wiki/ANSI_escape_code这是带内信令的示例。
abgordon '16

216

尝试reset。它清除了终端屏幕,但是可以通过箭头或任何具有键绑定的方式访问先前的命令。


3
谢谢!但这会清除包括提示在内的所有内容。请参阅我的答案以获取不执行此操作的解决方案。
Autodidact'3

5
@ SDX2000都清除提示,然后shell生成一个新提示。重置的一个缺点是它似乎要慢一些(可能是因为它不仅仅发出ESC c),而且更易携带。
Laurence Gonsalves

@Laurence感谢您的澄清...我尝试重设,但速度太慢,以至于我认为提示和其他所有内容都已清除。我仍然会更喜欢使用,ESC c因为我可能永远不会使用Ubuntu以外的任何终端。虽然reset可能有一天会在我通过串行端口等调试远程计算机时派上用场
。– Autodidact

1
@ SDX2000重置在某些情况下也很方便,因为由于您杀死了某些内容(或添加了二进制文件),导致终端严重损坏,并且使术语处于混乱状态。您是否曾经进入过显示提示而不是键入的状态,当您按Enter键时,新提示显示在前一个提示的旁边而不是下方?重置可修复该问题。实际上,这就是我用过的所有东西……我从来没有需要/不需要清除我的回滚缓冲区。
Laurence Gonsalves

4
与之相关的一秒钟延迟reset对我来说是无法承受的。
Jonathon Reinhart


7

在PuTTY中,我所读的答案均无效,因此我对本文发表了评论:

在连接的设置中,在“窗口->行为”下,您将找到“仅在ALT上出现系统菜单”设置。然后CTRL + L,ALT,l(小写的L)将滚动屏幕,然后清除回滚缓冲区。

(与OP有关,因为我正在连接到Ubuntu服务器,但无论您的服务器在运行什么,显然也都与之相关。)


@Dennis Williamson的3年评论使我想到了这个答案。
TecBrat 2014年

此外,由于在腻子“窗口的”设置您激活了“Alt +空格键显示系统菜单”,你可以迅速做CTRL+L那么ALT+SpaceU它首先清除终端窗口,然后真正的重置回滚。
皮埃尔·沃伊辛

6

以下链接将说明如何使该别名永久化,这样您就不必继续输入它。

/ubuntu/17536/how-do-i-create-a-permanent-bash-alias

这些是该链接上详细介绍的步骤。

  1. vim〜/ .bashrc或gedit〜/ .bashrc或您喜欢的任何文本编辑器
  2. 将别名cls ='printf“ \ 033c”'放在文件底部
  3. 保存并退出
  4. 。〜/ .bashrc(是的,。和〜之间应该有一个空格)
  5. 现在检查是否一切正常!

我不相信这些信息只是将其传递。



4

为此,我最喜欢的人类友好命令是:

reset

在xterm和VT100上测试。在程序异常终止后,它也有帮助。保留命令缓冲区,因此向上箭头将循环显示先前的命令。

欢呼声:D


3

我知道不支持采用新行打印的解决方案,但是如果其他所有方法都失败了,为什么不呢?尤其是在一个人可能会看到屏幕但无法进行键盘记录的环境中操作的情况下。那么,一种可能的解决方案是以下别名:

alias c="printf '\r\n%.0s' {1..50}"

然后,要“清除”屏幕的当前内容(或隐藏它们),只需c+Enter在终端上键入。


2

只是要添加tmux滚动缓冲clearreset否则不能用或清除printf。您需要:clear-history。见链接


-2
echo -e "\e[3J"

这适用于Linux机器


4
尽管我们感谢您的回答,但如果它在其他答案的基础上提供附加价值,那会更好。在这种情况下,您的答案没有提供其他价值,因为另一个用户已经发布了该解决方案。如果以前的答案对您有所帮助,则应投票赞成,而不要重复相同的信息。
Toby Speight

-53

编译这个程序。

#include <iostream>
#include <cstring>

int main()
{
  char str[1000];
  memset(str, '\n', 999);
  str[999] = 0;
  std::cout << str << std::endl;
  return 0;
}

33
抱歉,但这不是最佳解决方案。有比喷出999个换行符更好的方法
pbfy0

2
确实有一些价值。在某些终端中,使用其他方法清除屏幕会杀死历史记录,并且不允许您向后滚动...尽管使用999行,我的手指会感到疲倦。可怜的家伙。
JoshuaDavid

@JoshuaDavid问题的全部意义是,OP也不会希望能够清除后滚动回来。
Socowi

@Socowi我的评论是针对这个-50评分不佳的答案,而不是OP。但是你是对的!
JoshuaDavid '18 -10-17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.