【问题标题】:"CLS" Equivalent in BASH?BASH 中的“CLS”等价物?
【发布时间】:2011-09-16 01:25:42
【问题描述】:

如何在 BASH 中清除整个终端,比如命令提示符的cls 命令?

clear 不起作用,因为它实际上并没有清除任何内容,它只是向下滚动。

【问题讨论】:

  • “它只是向下滚动”是什么意思?您实际上不想向上滚动以查看之前的内容吗?你用的是什么终端?
  • “重置”呢?
  • @Random832:我的意思是它只是向下滚动,而不是清除任何东西。 (我使用的是 Ubuntu 的默认终端,我相信它是 gnome-terminal,抱歉我忘了提及)。 @Alex:我从没听说过reset——它似乎完全符合我的需要,但它就是 all 吗?还是它也会重置其他东西?
  • @Random832:因为当我随后向上滚动回到它开始的地方时很烦人,因为它更难找到开始。
  • tput reset 确实

标签: bash terminal


【解决方案1】:

据我所知,没有比 clear 对 bash 所做的更好的方法了。

我认为这是一个可以内置到您正在使用的终端中的功能。我知道 Mac 终端应用程序有一个“清除回滚”菜单选项(command + k),可以满足您的要求。

【讨论】:

  • +1 感谢您提供的信息。我仍然需要弄清楚“shell”和“terminal”之间的区别。 :)
  • shell -> 正在运行的软件。 terminal -> 电脑的一部分,通常由玻璃制成,你可以扔掉。 virtual terminal -> 一个像终端一样运行的软件。 (xterm)。
【解决方案2】:

你为什么不试试Ctrl+l(控制,小写“L”)。这适用于大多数 shell(错误终端)...

在 OSX 终端中 -

Command ⌘+l (command, l) 导致从显示中删除最后输入的命令。

Command ⌘+k (command, k) 导致删除/清除所有显示缓冲区。

reset(在终端中输入)会导致终端重置,以防显示出现乱码。

不确定其他 unix 风格的等价物。

【讨论】:

  • ctrl + L 相当于清除。它向下滚动。
【解决方案3】:

You're probably looking for the reset command.

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

【讨论】:

  • +1 不敢相信我没有在搜索中找到那个,我的问题绝对是个骗子......
  • 不幸的是,这有很大的延迟。
【解决方案4】:

xterm 将允许转义序列ESC [3J 清除回滚,因此您可以这样做:

alias cls="clear; printf '\033[3J'"

【讨论】:

  • +1 感谢您提供信息,这是另一种答案,但仍然有用。
  • 迄今为止最好的答案,干得好
【解决方案5】:

简答

clear && clear

tput reset

其他方式

以下是在 Unix 中清除终端屏幕的所有方法:

clear               # only clear visible screen
clear && clear      # clear buffer as well
tput clear          # same as clear but by sending escape seq
reset               # clear + reset internal terminal state + 1sec delay
tput reset          # same as reset but without 1sec delay
stty sane           # don't clear screen but reset some terminal options
echo -e "\033c"     # same as tput reset but hardcoded escape seq
printf "\033c"      # same as tput reset but hardcoded escape seq
setterm -reset      # same as tput reset, setterm has friendlier commands

长答案

clear 命令只清除可见屏幕,但不清除缓冲区,因此您可以使用Shift+PageUp 在终端中向上滚动并仍然查看以前的输出。如果您想获得与cls 相同的结果,请像clear && clear 一样清除两次。

另一个相关的命令是reset(我相信)它会重置终端程序的内部状态。不幸的是,这个命令包含 1 秒的延迟来支持非常旧的终端。因此,如果您对这种延迟不满意,请使用tput reset,这似乎与重置减去延迟相同。

但是tput 做了什么?在 Unix 中,您可以向终端发送各种 ASCII 字符序列,这些字符序列被终端解释为命令。这使您可以做一些时髦的事情,例如闪烁或为文本着色或关闭回显(在输入密码期间)或设置终端选项或清除或重置。您可以通过tput cleartput reset 发送。 clearreset 命令是等效的,但它们从发行版附带的二进制文件中运行,并且可能会执行其他操作。 setterm -reset 类似于 tput reset。使用setterm 设置终端通常更好,因为与tput 不同,它在一般情况下具有更多可读选项,但是我们在这里使用 tput 因为它的长度更小:)。

您可能还看到人们使用 echo -e "\033c"printf "\033c" 之类的东西,它们等同于 tput reset,但转义序列现在是硬编码的。 tput 查找终端属性并使用正确的转义序列。

另一个相关的命令是stty sane,它实际上不执行任何屏幕清除,但它sets many of the terminal options 是默认的,所以如果您的终端看起来乱码或者当您键入时终端保持空白(例如,因为您将二进制文件打印到带有转义序列的终端以关闭回显),那么此命令可能会有所帮助。对于极端乱码的终端情况,您可以按顺序使用所有可用的重置技术。在这种情况下,我有这样的别名:

alias cls='tput reset'
alias clshard='reset; stty sane; tput rs1; setterm -reset; tput reset'

相关

What's the equivalent of the “cls” command from Windows/DOS?

What commands can I use to reset and clear my terminal?

【讨论】:

  • 有没有一个命令可以实现向下滚动到空白区域直到当前输入位于窗口顶部的类似效果,但不删除上面的历史记录?
  • 不幸的是,这些都没有即时的 Cmd-K(在 Mac 上)那么快。它们都至少需要大约三分之一秒。似乎不可能很快做到。
【解决方案6】:

使用 +K。它删除了条目,所以我不能再向上滚动了。

所以 +K 清除所有内容,包括滚动。 Ctrl+L 清除终端窗口,但向上滚动时仍能看到所有内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2010-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多