通过printf设置Linux终端输出的颜色和显示方式
转载自:http://www.cnblogs.com/clover-toeic/p/4031618.html
在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 }
执行结果截图如下:

通过printf设置Linux终端输出的颜色和显示方式的更多相关文章
- 花里胡哨,如何在Linux终端输出带有颜色的字体,将带颜色的字体赋值给变量
背景 在日常操作Linux的情况下,总会遇到一些需求,比如说,把输出的内容用不同颜色标注出来,以达到醒目.提示的目的,那么如何在Linux终端输出带有颜色的字体呢? Linux终端输出字符颜色 ...
- securecrt中vim行号下划线问题及SecureCRT里root没有高亮的设置,修改linux终端命令行颜色
背景:在用raspberry用SecureCRT下的vim打开文件时出现用set nu时行有下划线,于是找了下解决办法,如下:vim行号下划线问题在vim中发现开启显示行号(set number) ...
- 修改linux终端命令行颜色
进入修改:vim /root/.bashrc 1.PS1 要修改linux终端命令行颜色,我们需要用到PS1,PS1是Linux终端用户的一个环境变量,用来说明命令行提示符的设置.在终端输入命令:#s ...
- linux 终端输出颜色
在Linux终端下调试程序时,有时需要输出大量信息.若能控制字体的颜色和显示方式,可使输出信息对比鲜明,便于调试时观察数据. 终端的字符颜色由转义序列(Escape Sequence)控制,是文本模式 ...
- SecureCRT设置linux终端显示颜色
在linux系统上,我们使用终端时,对于文件或目录会显示不同的颜色.而SecureCRT默认显示的颜色是单一的,我们该如何让其像linux一样显示个性化颜色呢. 使用SecureCRT登录 linux ...
- Linux 终端下的颜色
Linux 终端下颜色的输出 在命令行下也能产生五颜六色的字体和图案,只需要加上一些颜色代码,例如 echo -e "\033[41;36m 红底绿字\033[0m" 其中41的位 ...
- 修改linux终端DIR显示颜色
头疼死,linux终端下,目录颜色蓝色在黑色的背景下,睁大双眼都看不清楚. 找办法修改,找到默认的颜色设置目录: # vi /etc/DIR_COLORS 查看文件,并查找DIR: 可以看到默认设定“ ...
- Python 终端输出字体颜色
终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义序列是以ESC开头,即用\033来完成(ESC的ASCII码用十进制表示是27,用八进制表 ...
- 设置Linux终端字体颜色
系统启动后,环境变量加载的顺序为:/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile → ~/.bashrc → /etc/bashrc 想要修改 ...
随机推荐
- 通过Mac远程调试iPhone/iPad上的网页(转)
我们知道在 Mac/PC 上的浏览器都有 Web 检查器这类的工具(如最著名的 Firebug)对前端开发进行调试,而在 iPhone/iPad 由于限于屏幕的大小和触摸屏的使用习惯,直接对网页调试非 ...
- JDBC读取新插入Oracle数据库Sequence值的5种方法
Oracle的sequence实现非常灵活,所以也带来一些易用性问题,如何取到新插入记录生成的sequence值与其它数据库有较大差别,本文详国介绍了5种实现读取新插入记录sequence值的方法. ...
- 【leetcode❤python】 414. Third Maximum Number
#-*- coding: UTF-8 -*- #l1 = ['1','3','2','3','2','1','1']#l2 = sorted(sorted(set(l1),key=l1.index,r ...
- GaugeControl 数字时钟,温度计,仪表盘
https://documentation.devexpress.com/#WindowsForms/CustomDocument18217 This topic will guide you thr ...
- 《BI项目笔记》创建多维数据集Cube(1)
有两个事实表,因此就有两个度量值组,并且向导将为非维度键的事实表中的每一个数值列创建一个度量值.由于我们这里不需要那么多,所以只选择部分度量值.另外要注意,度量值的名称源于事实表中的列,所有名称由可能 ...
- mac 安装tomcat
一.下载 首先在tomcat官网下载完整版的 tomcat.tar.gz包,Core下 注: zip用于windows操作系统,tar.gz用于unix和linux操作系统. Binary Distr ...
- Mac下安装Wireshark,双击闪退
Mac OS X上使用Wireshark抓包(http://blog.csdn.net/phunxm/article/details/38590561) Mac下安装Wireshark /Appli ...
- IOS_改变UITextField placeHolder颜色、字体
http://blog.sina.com.cn/s/blog_671d2e4f0101d90v.html
- Deep Learning 6_深度学习UFLDL教程:Softmax Regression_Exercise(斯坦福大学深度学习教程)
前言 练习内容:Exercise:Softmax Regression.完成MNIST手写数字数据库中手写数字的识别,即:用6万个已标注数据(即:6万张28*28的图像块(patches)),作训练数 ...
- mysql 基础篇1
1 引入 数据保存到内存: 优点: 1)读写非常快 缺点: 1)程序关闭导致数据丢失 数据保存到文件: 优点: 1)数据可以永久保存 缺点: 1)频繁地IO操作,效率不高! 2)数据管理不方便.例如查 ...