“ CLS”在 BASH 中的等价物? ?

如何像命令提示符的 cls命令那样在 BASH 中清除整个终端?

clear不工作,因为它实际上不清除任何东西,它只是向下滚动。

79681 次浏览

您可能正在寻找 reset命令。

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

你为什么不试试 Ctrl + l(控制,小写“ L”)。

在 OSX 终端-

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

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

reset(在终端中输入这个)导致终端的复位,以防显示变得混乱。

不确定在其他 Unix 风格中是否相同。

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

我认为这是一个功能,可以内置到终端你正在使用的。我知道 Mac Terminal 应用程序有一个“ Clear Scrollback”菜单选项(命令 + k) ,可以满足你的要求。

xterm将允许转义序列 ESC [3J清除回滚动,所以你可以这样做:

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

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

因此, + K清除一切,包括滚动。 Ctrl + L清除终端窗口,但仍然可以看到一切时,向上滚动。

简短的回答

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 字符序列,这些字符序列被终端解释为命令。这允许你做一些奇怪的事情,比如眨眼、给文本上色、关闭 echo (在输入密码时)、设置终端选项、清除或重置。这你可以通过 tput cleartput reset发送。clearreset命令是等价的,但是它们从发行版附带的二进制文件运行,并且可能做其他事情。setterm -reset类似于 tput reset。使用 setterm设置终端通常更好,因为与 tput不同,它在一般情况下有更多可读的选项,但是我们在这里使用 tput,因为它的长度更小:)。

你可能也看到过人们使用类似于 echo -e "\033c"或者 printf "\033c"的东西,它们相当于 tput reset,但是转义序列现在是硬编码的。tput查找终端属性并使用正确的转义序列。

另一个相关的命令是 stty sane,它实际上不做任何屏幕清除,但它的 设置许多终端选项默认值,所以如果你的终端看起来混乱或如果终端保持空白当你输入(例如,因为你打印二进制文件到终端与转义序列关闭回声) ,然后这个命令可能会有所帮助。对于极端混乱的终端情况,您可以使用序列中所有可用的重置技术。在这种场合,我有这样的化名:

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

相关资料

Windows/DOS 中的“ cls”命令的等价物是什么?

我可以使用什么命令来重置和清除我的终端?

在 ~/. bashrc 中,完美的 cls 是:

cls () {
printf -- '%b' '\033c'
return $?
}

clear命令为我工作。

但我个人认为它不切实际,因为对我来说,它永久和不可逆地清除了回滚。然而,我通常只是想在回滚中插入一些“标记”/“分隔符”,以便能够在视觉上区分“最近的回滚”和“太老的回滚”(但有时能够看到“太老的回滚”仍然是有用的)。所以我用了这样的词:

yes '' | head -n100

这将在回滚中插入100行空行。(灵感来自 这个答案。当然,你可以改变行数。)