通过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 想要修改 ...
随机推荐
- Bootstrap_按钮工具栏
单个按钮在Web页面中的运用有时候并不能满足我们的业务需求,常常会看到将多个按钮组合在一起使用,比如富文本编辑器里的一组小图标按钮等. Bootstrap框架为大家提供了按钮组组件. <div ...
- jquery总结05-常用事件04-委托事件
委托事件on 多个事件绑定同一个函数 $("#elem").on("mouseover mouseout",function(){ });通过空格分离,传递不同 ...
- 学习mongo系列(六)limit(munber),skip(number)
> db.user.find().pretty(){ "_id" : ObjectId("56946fba3a18f4867aecbcd1"), &quo ...
- angularJS学习笔记之——搭建学习环境
学习AngularJS已经好几天了,从今天开始学习AngularJS环境搭建. 无论是Mac.Linux或Windows环境中,您均可遵循本教程学习编程. 第一步:安装Git Git是什么呢? Git ...
- golang strings
package main import s "strings" //别名 import ( "fmt" ) var p = fmt.Println func m ...
- JavaScript笔记三两个
JavaScript定义变量: var num;变量的类型不知道,当给num赋值后,根据值类型来确定类型. var num = 3; //数值类型 var str = "hello,worl ...
- android 破解工具
来记录一下本人在平时工作中使用的android上的破解工具 静态破解: apktool: apk包 -> dex dex2jar和enjarify(google官方出品): dex->ja ...
- Sphinx 的介绍和原理探索——不存储原始数据,原始数据来源于SQL,而生成索引放在内存或者磁盘中
摘自:http://blog.jobbole.com/101672/ What/Sphinx是什么 定义:Sphinx是一个全文检索引擎. 特性: 索引和性能优异 易于集成SQL和XML数据源,并可使 ...
- hdoj 3501
Problem Description Given a positive integer N, your task is to calculate the sum of the positive in ...
- node+mongodb+ionic+cordova
node + mongodb1,环境 windows 1,install nodejs 2,install npm | cd npmjs node cli.js install -gf1.1 2.no ...