Linux控制台终端的清屏操作方式

陪她去流浪 桃子 2015年04月18日 阅读次数:6964

前言

在使用Linux终端时,难免会遇到有时候会输出大量的内容,特别是在编译软件的时候,特别特别是在使用GCC的时候。GCC居然没法输出带有颜色的编译信息,满屏的警告、注意、错误交织在一起,简直让人蛋碎,花费了大量时间去找真正的错误所在行。。。

一直在 Ubuntu 终端上使用 clear 命令 “清屏”,但我发现我被愚弄了。因为 clear 命令但不是真正的清屏,它只是把终端的提示符所在的行滚动到了屏幕的最上面,所以,看似屏幕是被清空了,实但没有,滚动条往上面一滚,内容就又全部摆在眼前了,有个蛋用啊!但我居然还用了几个月的此命令!今天写下这篇文章,极有可能是因为我受不了了。

解决方案

Google了一番发现,不同版本 Linux 的 Distribution 的操作方式并不通用。而我使用的是 Ubuntu,所以其它的我就不能测试了,但依然可以列出来让大家试试。
这些方法都来自于 StackOverflow 上的一个问答。

printf 终端重置控制字符 清屏

这种方法的原理是很好理解的:Linux的终端的底层支持控制字符(别以为很神奇,你应该知道 '\n' 能控制换行吧?知道就好,类似了。)。

printf '\033c'

八进制的转义字符 \033 就是十六进制的 \x1b,就是十进制的27,也就是ASCII码为27的字符:ESC!

ESC字符属于控制字符所在范围(0 ~ 31),而控制序列 <ESC>c 的作用就是重围终端,这下明白了吧?更多的控制序列参考文后的外部链接。

其它版本:

printf "\ec" #\e 在bash中代表 ESC
echo -en "\ec"
# -e 使能终端转义字符
# -n 不要在最后自动加上换行符

reset 命令

这个命令蛮简洁,效果也蛮好。

reset

tput 命令

这个命令不太了解(还有那个 tset,靠,命令不少,相似的命令也不少),但有效果:

tput reset

KDE 终端

很意外,上面的操作貌似都不能在KDE终端(Konsole)上工作,但可以使用下面的命令来代替:

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

PuTTY

貌似上面的方法都没法在 PuTTY 上面工作。但可以在设置中设置快捷键(暂时没用Putty,以后再补上;这不是坑!)。

笨人笨方法

看到这个方法,也许大家都笑了,但这个方法确实有“一定”的效果!

#include <iostream>
#include <cstring>

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

但看得出来,楼主对 linux 的 seq命令 不熟,下面是 seq 的实现:

seq 999 | tr -d '[0-9]'

设置命令别名

如果 reset 命令不能工作,而又要输入长长的 printf,不妨为命令设置一个简短的别名吧:

  1. $ vim ~/.bashrc
  2. 加入一行:alias cls='printf "\033c"'
  3. 保存并退出
  4. 立即生效:source ~/.bashrc

参考

标签:linux · Bash