linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息。若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据。
终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式下的系统显示功能,与具体语言无关。
转义序列以控制字符'ESC'开头。该字符的ASCII码十进制表示为27,十六进制表示为0x1B,八进制表示为033。多数转义序列超过两个字符,故通常以'ESC'和左括号'['开头。该起始序列称为控制序列引导符(CSI,Control Sequence Intro),通常由'\033['或'\e['代替。
通过转义序列设置终端显示属性时,可采用以下格式:
\033[ Param {;Param;...}m 或 \e[ Param {;Param;...}m
其中,'\033['或'\e['引导转义序列,'m'表示设置属性并结束转义序列。Param为属性值,{...}表示可选(多个参数之间用分号隔开,与顺序无关)。
注意,转义序列可被控制字符'CAN'(Cancel )和'SUB'(Substitute)中断。
转义序列相关的常用参数如下(通过man console_codes命令可查看更多的参数描述):
显示:0(默认)、1(粗体/高亮)、22(非粗体)、4(单条下划线)、24(无下划线)、5(闪烁)、25(无闪烁)、7(反显、翻转前景色和背景色)、27(无反显)
颜色:0(黑)、1(红)、2(绿)、 3(黄)、4(蓝)、5(洋红)、6(青)、7(白)
前景色为30+颜色值,如31表示前景色为红色;背景色为40+颜色值,如41表示背景色为红色。
调色效果如下图所示:
因此,通过转义序列设置终端显示属性时,常见格式为:
\033[显示方式;前景色;背景色m输出字符串\033[0m 或 \e[显示方式;前景色;背景色m输出字符串\033[0m
此外,还有一些ANSI控制码,如:nA (光标上移n行 )、nB(光标下移n行 )、nC(光标右移n行 )、nD (光标左移n行 )、2J(清屏)、K(清除从光标到行尾的内容)、s(保存光标位置)、u(恢复光标位置)、?25l(隐藏光标)、?25l(显示光标)。 其中 ,'\033[0m'用于恢复默认的终端输出属性,否则会影响后续的输出。
基于常用参数,可定义如下单一控制宏,用于printf系列语句:

1 #define NONE "\e[0m"
2 #define BLACK "\e[0;30m"
3 #define L_BLACK "\e[1;30m"
4 #define RED "\e[0;31m"
5 #define L_RED "\e[1;31m"
6 #define GREEN "\e[0;32m"
7 #define L_GREEN "\e[1;32m"
8 #define BROWN "\e[0;33m"
9 #define YELLOW "\e[1;33m"
10 #define BLUE "\e[0;34m"
11 #define L_BLUE "\e[1;34m"
12 #define PURPLE "\e[0;35m"
13 #define L_PURPLE "\e[1;35m"
14 #define CYAN "\e[0;36m"
15 #define L_CYAN "\e[1;36m"
16 #define GRAY "\e[0;37m"
17 #define WHITE "\e[1;37m"
18
19 #define BOLD "\e[1m"
20 #define UNDERLINE "\e[4m"
21 #define BLINK "\e[5m"
22 #define REVERSE "\e[7m"
23 #define HIDE "\e[8m"
24 #define CLEAR "\e[2J"
25 #define CLRLINE "\r\e[K" //or "\e[1K\r"

编写测试代码验证转义序列控制的效果:

1 int main(void)
2 {
3 printf("This is a character control test!\n" );
4 sleep(3);
5 printf("[%2u]" CLEAR "CLEAR\n" NONE, __LINE__);
6
7 printf("[%2u]" BLACK "BLACK " L_BLACK "L_BLACK\n" NONE, __LINE__);
8 printf("[%2u]" RED "RED " L_RED "L_RED\n" NONE, __LINE__);
9 printf("[%2u]" GREEN "GREEN " L_GREEN "L_GREEN\n" NONE, __LINE__);
10 printf("[%2u]" BROWN "BROWN " YELLOW "YELLOW\n" NONE, __LINE__);
11 printf("[%2u]" BLUE "BLUE " L_BLUE "L_BLUE\n" NONE, __LINE__);
12 printf("[%2u]" PURPLE "PURPLE " L_PURPLE "L_PURPLE\n" NONE, __LINE__);
13 printf("[%2u]" CYAN "CYAN " L_CYAN "L_CYAN\n" NONE, __LINE__);
14 printf("[%2u]" GRAY "GRAY " WHITE "WHITE\n" NONE, __LINE__);
15
16 printf("[%2u]\e[1;31;40m Red \e[0m\n", __LINE__);
17
18 printf("[%2u]" BOLD "BOLD\n" NONE, __LINE__);
19 printf("[%2u]" UNDERLINE "UNDERLINE\n" NONE, __LINE__);
20 printf("[%2u]" BLINK "BLINK\n" NONE, __LINE__);
21 printf("[%2u]" REVERSE "REVERSE\n" NONE, __LINE__);
22 printf("[%2u]" HIDE "HIDE\n" NONE, __LINE__);
23
24 printf("Cursor test begins!\n" );
25 printf("=======!\n" );
26 sleep(10);
27 printf("[%2u]" "\e[2ACursor up 2 lines\n" NONE, __LINE__);
28 sleep(10);
29 printf("[%2u]" "\e[2BCursor down 2 lines\n" NONE, __LINE__);
30 sleep(5);
31 printf("[%2u]" "\e[?25lCursor hide\n" NONE, __LINE__);
32 sleep(5);
33 printf("[%2u]" "\e[?25hCursor display\n" NONE, __LINE__);
34 sleep(5);
35
36 printf("Test ends!\n" );
37 sleep(3);
38 printf("[%2u]" "\e[2ACursor up 2 lines\n" NONE, __LINE__);
39 sleep(5);
40 printf("[%2u]" "\e[KClear from cursor downward\n" NONE, __LINE__);
41
42 return 0 ;
43 }

执行结果截图如下:
linux 终端输出颜色的更多相关文章
- 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量
背景 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ...
- php 扫描url死链接 \033[31m ANSI Linux终端输出带颜色
* 从Packagist上搜索需要的包 https://packagist.org/ * 通过composer下载依赖包 composer require guzzlehttp/guzzlecompo ...
- 修改Linux终端提示符颜色
修改Linux终端提示符颜色 作者:Eric 微信:loveoracle11g [root@linux-node2 ~]# tail -1 .bashrc PS1='[\[\033[1;31m\]\u ...
- 通过printf设置Linux终端输出的颜色和显示方式
转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html 在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出 ...
- Linux 终端下颜色的输出
在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如 echo -e "\033[41;36m 红底绿字\033[0m" 其中41的位置代表底色, 36的位置是代表 ...
- SecureCRT设置linux终端显示颜色
在linux系统上,我们使用终端时,对于文件或目录会显示不同的颜色.而SecureCRT默认显示的颜色是单一的,我们该如何让其像linux一样显示个性化颜色呢. 使用SecureCRT登录 linux ...
- Linux终端提示符颜色设置
将以下语句添加到用户目录下的 .bashrc 文件中,然后执行 source .bashrc 使其立即生效. PS1='${debian_chroot:+($debian_chroot)}\[\033 ...
- Linux Shell输出颜色字符学习笔记(附Python脚本实现自动化定制生成)
齿轮发出咔嚓一声,向前进了一格.而一旦向前迈进,齿轮就不能倒退了.这就是世界的规则. 0x01背景 造了个轮子:御剑师傅的ipintervalmerge的Python版本.觉得打印的提示信息如果是普通 ...
- 设置Linux终端字体颜色
系统启动后,环境变量加载的顺序为:/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → /etc/bashrc 想要修改 ...
随机推荐
- 混合线路接入时,360、QQ管家等测速显示电信IP或任意线路的IP
最近很多人QQ上问我,我有电信.联通接入,用户测速的时候有的时候显示联通的IP,可是我想让他显示为电信的IP,怎么办? 3年前开始使用联通的线路时,就这样设置了,有些人还拿这个设置当宝贝了???? 其 ...
- Asp.net中文本框全选的实现
一.鼠标滑过textbox全选 前台: <asp:TextBox runat="server" onMouseOver="this.focus();this.sel ...
- 【Intel AF 2.1 学习笔记二】AF中的页面——Panel
Panel Panel控件是你的app中的独立内容的区域控件.它是af UI的核心.Panel div 元素实际上承载了app中你管理和显示的界面元素和内容. 创建panel控件是相当地容易的:在id ...
- 微信小程序/支付宝小程序 WxParse解析富文本(html)代码
小程序本身并不太支持html代码,比如html的img.span.p这个时候改这么办呢?需要用到一个小插件WxParse来实现. 小程序高级交流群:336925436 微信小程序支持富文本编辑器代码 ...
- Hibernate的七种映射关系之基本映射
说到关系,在这个世界无处不在,我们必须以某个关系的节点存在在这个世界网中.比如父子关系,师生关系,上下属关系甚至是危险关系.数据也是一样的,它的存在必为某其他节点做准备. Hibernate有七种映射 ...
- VVDocumenter规范注释生成器
下载地址:https://github.com/onevcat/VVDocumenter-Xcode PS:Xcode 8.0 默认支持了,但是是关闭状态,需要在终端输入如下命令开启,然后重启 Xco ...
- UNIX环境编程学习笔记(28)——多线程编程(三):线程的取消
lienhua342014-11-24 1 取消线程 pthread 提供了pthread_cancel 函数用于请求取消同一进程中的其他线程. #include <pthread.h> ...
- 想高效学会Hadoop,你要按照这个路线
学习hadoop,首先我们要知道hadoop是什么? 说到底Hadoop只是一项分布式系统的工具,我们在学习的时候要理解分布式系统设计中的原则以及方法,只有这样才能以不变应万变.再一个就是一定要动手, ...
- level1 - unit 1 - 句子结构
preface 学习英语做为一种爱好,就是希望有一天能够和老外流畅沟通,目前来看,日常沟通还是没有问题的和我的外教. 知识日积月累,现在就把以前学习的(从初中到现在)知识总结下.每天一更,更到单元总结 ...
- windows下caffe安装配置、matlab接口
一.CommonSettings.props caffe下载后解压.源代码文件夹caffe-master,到该文件夹下的windows文件夹下,将CommonSettings.props.exampl ...