我可以使用哪些命令来重置和清除终端?


64

我一直在使用命令:

reset

清除我的终端。尽管我很确定这不是我应该做的。顾名思义,Reset重置整个终端(更改很多东西)。这是我想要的:

我基本上想使用命令clear。但是,如果您清除然后向上滚动,您仍然会获得大量的东西。通常,这不是问题,但是我正在查看的日志很长,因此我想确保只查看最新的日志。我知道我可以使用more类似的方法,但我更喜欢这种方法。


对于这里到底要问什么似乎有很多困惑。您能否澄清所有问题?清除终端回滚缓冲区,您到底想完成什么?(如果是,那么您正在使用什么终端应用程序?)
quack quixote 2010年

1
Ctrl-L将以bash(默认为emacs模式)清除屏幕,类似于执行清除程序。

刚刚在IntelliJ IDE的bash终端中对此进行了测试。工作正常,并清除了正是我想要的回滚。谢谢。
伊恩·刘易斯

我知道这已经死了,但是我想你想要的是clear && printf '\033[3J'。无需重置终端,只需清除屏幕上的文本即可。看到这个帖子:superuser.com/questions/555554/…–
jwd

Answers:


57

回滚缓冲区不是bash的功能,而是终端程序的功能。您没有说要使用什么终端。

如果您使用的是xterm,则可以通过在终端上回显ESC-c来清除保存的行。

这可能会或可能不会在您使用的任何终端程序上起作用。

在Linux上,这可能会起作用:

echo -e '\0033\0143'

在FreeBSD上,echo不接受-e,因此您可以尝试:

printf '\033\143'

我正在使用xterm。但是我不明白你的意思。我应该识字打字echo ESC-c吗?
sixtyfootersdude

2
@sixtyfootersdude:不,不是文字ESC。阅读Wikipedia上的文章“转义字符”和“控制字符”- ESC通常用于表示ASCII字符0x1B,您可以通过按^V并在其后插入Esc
grawity 2010年

1
你不应该 如果您的解决方案涉及编写原始终端转义序列,则应重新考虑该解决方案。我会用“少”代替猫。如果您真的想了解“终端转义序列”,Google可以为您提供帮助。
Craig

2
@HaraldNordgren最好使用更标准的printf而不是echo -e。
好人2016年

3
为什么要\0143代替c
ruakh

51

为每个作业使用正确的工具:

  • 使用clear清除终端窗口。

  • 用于reset在终端被控制序列弄乱时重置终端。

  • 使用cat只有当你想从一个地方到另一个流一大堆数据的不间断

  • 使用诸如less或的寻呼程序most来查看输出页面。

  • 使用tail -f /var/log/foo.log /var/log/bar.log看几个不同的日志文件。

    • 使用GNU时tail,该-F选项更好,因为即使在出现新文件的情况下,它也可以继续跟踪文件,这在日志文件中很常见。

14
这并不能真正回答我的问题。
stytyfootersdude”,2010年

7
是的,确实如此。不要用猫文件来读取它们,不要用猫文件来连接它们。使用更少或更多的文件来读取文件-这样您就不会遇到相同的问题。
Rich Bradshaw 2010年

查找“猫的无用使用”
galois

许多人反对使用cat读取任何内容,但是对于小文件,cat使用而不是使用实际上对他们来说很有意义less。将文件转储到终端后,您可以根据需要多次查看/滚动回该文件,而不必less在执行其他任何操作之前将其关闭。
GKFX

22

只是提供技术上的答案:reset重新初始化终端,就像从头开始重新打开一样。stty sane将执行很多相同的功能(无需重置)。这与^L(Ctrl + L)(irrc)和tput clear。尽管前面的发帖人(@grawity)说了什么,clear但不会输出很多换行符。它使用(xterm)发送命令TERM中定义的,terminfo或者termcap对我来说,gnome-terminal它与命令相同perl -e'print "\33[H\33[2J"'

如果您只想清除缓冲区-与重置整个终端相比,请尝试执行此操作tput reset。它应该非常快,并且可以执行您想要的操作。(尽管您确实应该使用来读取文件less

tput reset,发送terminfo值进行重置-在我的终端(xterm)上,该值与 perl -e'print "\33c"'


1
我并没有clear输出一串换行符。我只是提供了一个命令来替代它,因为clear它只清除屏幕而不清除回滚缓冲区。(至少不在PuTTY或Konsole中。)
grawity

1
出于这个原因,打印一堆换行符并不是清除清除的替代方法-您不知道终端将如何使用清除信号。最好只是告诉新人们,您有一个知道如何处理终端的数据库,它有两个键值,一个键值映射clear为信号名称,另一个则映射reset为信号,只有后者导致清除回滚缓冲区。reset在执行其他有趣的事情之前发送后者。
埃文·卡罗尔

1
据sixtyfootersdude的原来的问题,clear不会重置自己的回溯。(ESC c可以在xterm基于VTE的环境中使用,但不能在PuTTY和Konsole中使用。)他不想使用reset任何一个,因为它的重置次数超过了他的期望。(我不知道他使用哪个终端-但stty在重置之前和之后进行比较。)
grawity 2010年

2
就像我说的那样,他可能想要tput reset,它将复位信号发送到终端-而不实际重新初始化该术语。“重置-如果不存在终端字符串的重置字符串(rs1,rs2,rs3,rf),则将输出终端的重置字符串。如果不存在重置字符串,但是存在初始化字符串,则将输出初始化字符串。否则,重置的行为与初始化相同。” 在这里,我们已重置了字符串,因此不会运行初始化字符串。
埃文·卡罗尔

+1:建议,但tput reset速度很慢(与相同reset)。 printf '\033\143'快得多。有什么理由使printf方法危险/不好?
stytyfootersdude”,2010年

9

另一个终端是iTerm2,它有一个用于清除回滚的奇怪的转义序列。在Bash shell中,我使用类似以下内容的东西:

echo -ne '\033]50;ClearScrollback\a'

在脚本中。因此,基本上是一个ESC字符,后跟“ ]50;ClearScrollback”和BEL字符。


1
CMD + K可在iTerm2中使用。CTRL + K在许多其他情况下也可以使用。
blockloop

我喜欢这种解决方案,因为它使我可以在shell脚本喜欢clearreset不喜欢的时候从shell脚本中清除iTerm2回滚缓冲区。但是,这并不是真正的最佳答案。我认为这种情况下,正确的答案是什么终端应用计划书,像命令-K在iTerm2,控制-K在其他国家,等等
LS

8

清除所有内容的最佳方法可能是使用终端的功能:

  • 的Konsole:Ctrl+ Shift+ K查看→清除屏幕回滚和复位
  • GNOME终端:编辑→重置并清除
  • 腻子:Ctrl+ right-click→清除回滚

这样,两个缓冲区都会被清除干净,并且终端状态将完全重置为启动时的状态(与使用可能相同或不同reset)。


嗯,我不知道该怎么办……
sixtyfootersdude

@sixtyfootersdude:我确定它那里,我只是不知道确切的菜单(目前无法使用gnome-terminal自己)...看一下“工具”和其他菜单。
grawity 2010年

在xterm中,它的ctrl中间按钮->“重置和清除保存的行”
Craig

3
少-W + F foo.log

+F用于“跟随”,类似于,tail -f但也可以使您向后滚动。

所有基于vte的终端(GNOME,Xfce,Roxterm)和KDE Konsole都可让您使用滚轮在内部滚动less。我觉得这很方便。


替代clear

perl -e'打印“ \ n” x512;'

xterm -e'tail -f foo.log'

3

在Mac OS X Terminal.app中:

查看->清除回滚(或command- K


@Rohit 如果问题是关于Mac OS X Terminal.app的,那么是的,这是一个很好的答案。但是,关于哪个终端和操作系统正在运行,最初的问题是模棱两可的,据我所知。
David J.

2

这不是一个“重击”问题。这取决于您使用的终端。例如,我在Macbook中使用“ iterm2”来连接远程Linux机器。您可以使用“ command + K”清除缓冲区,或者在菜单中选择“编辑”->“清除缓冲区”。


1

要在运行PuTTY时清除控制台屏幕和回滚缓冲区,这对我有用:

echo -en "\ec\e[3J"

实际上,这是2个独立起作用的“ Esc”序列...可以按以下顺序使用它们:

# clears the console screen, but not the scrollback buffer
# this is actually the escape code to "reset" the terminal
echo -en "\ec"

# clears the scrollback buffer, but not the console screen
# screen content remains, and cursor position remains at its last position
echo -en "\e[3J"

使用echo -en "\ec"哪个复位终端可以更改其他一些终端设置。代替“重置”,您可以这样做:

# position the cursor to "Home" (Top Row, First Column)
echo -en "\e[H"

# Erase down: clear the screen from the cursor down to the bottom of the screen.
echo -en "\e[J"

# Note: this is supposed to clear the screen and position the cursor to home,
# but it didn't work like that for me. It cleared the entire screen (above and 
# below the cursor), but left the cursor at its last position.
echo -en "\e[2J"

# putting everything together
echo -en "\e[H\e[J\e[3J"

您可以将其放在shell脚本中,并且效果很好。


如果存在一些系统依赖性:

我正在将PuTTY连接管理器(版本0.7.1 BETA(内部版本136))与PuTTY(版本0.60)一起使用。

输入:

echo \"$TERM\"; /bin/sh --version

报告:

"xterm"
GNU bash, version 4.1.2(1)-release-(x86_64-redhat-linux-gnu) ...

1

要在FreeBSD中清除硬件TTY的屏幕缓冲区,可以使用带参数-C的“ vidcontrol-系统控制台控件和配置实用程序”。清除历史记录缓冲区。

vidcontrol -C

该命令将清空当前控制台的所有屏幕缓冲区,超出当前显示的范围。您可能要先“清除”或不“清除”-由您决定。


0

如果要确保您正在查看日志文件中的最新条目,则最好使用tail代替clear/ cat,我假设您正在使用/。


实际上,我使用的是tail -f(连续日志),但是因为它们偶尔吐出数千行,所以向后滚动很重要。但是,很高兴知道我没有皱眉回到较旧的日志。
stytyfootersdude”,2010年

0

嗯 我想如果您运行Konsole,那您就不走运了。曾经是您可以“清除回滚”。Konsole不再允许您这样做。您也必须重置它,因此它会杀死您正在运行的任何程序。我想我需要一个新的终端程序……

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.