文档章节

控制台输出颜色控制(Console 模式下的颜色显示)

dingdayu
 dingdayu
发布于 2017/09/13 22:23
字数 1073
阅读 1135
收藏 19

前端时间,写了一篇 PHP 在 Console 模式下的进度显示 ,正好最近的一个数据合并项目需要用到控制台颜色输出,所以就把相关的信息整理下,写到OSC的博客中。

请注意,此篇文章中的颜色仅适用于仿真器(putty、secureCRT、XShell),以及unix终端,不适用于CMD(但依然可用于WIN下的仿真器)

简介

输入图片说明

在终端或仿真器中输入下面的代码,并回车,预览最直接的效果。

echo  -e "\033[1;31mI ♡  You \e[0m"

请注意,引号内的\e等同于\033\033\x1b\e效果是一样,对应键盘左上角Esc键对应的ASCII码(8进制);

通用的控制文本颜色的转义序列格式如下:

CSI n1 [;n2 [;…]] m

其中CSI全称为“控制序列引导器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\033是你键盘左上角Esc键对应的ascii码(八进制));

n1、n2等表示SGR参数(下面会列出一些常用的SGR参数),用于控制颜色、粗体、斜体、闪烁等文本输出格式;m表示转义序列结束。

颜色参数

常用颜色

格式:\033[显示方式;前景色;背景色m

说明:
前景色            背景色           颜色
---------------------------------------
30                40              黑色
31                 41              红色
32                42              绿色
33                43              黃色
34                44              蓝色
35                45              紫红色
36                46              青蓝色
37                47              白色

显示方式           意义
-------------------------
0                终端默认设置
1                高亮显示
4                使用下划线
5                闪烁
7                反白显示
8                不可见

例子:
\033[1;31;40m    <!--1-高亮显示 31-前景色红色  40-背景色黑色-->
\033[0m          <!--采用终端默认设置,即取消颜色设置-->

输入图片说明

RGB颜色

输入图片说明

使用方式:

ESC[ … 38;2;<r>;<g>;<b> … m Select RGB foreground color
ESC[ … 48;2;<r>;<g>;<b> … m Select RGB background color

特别注意:此处用法需从38开始设置, 代表前景色,48 代表后景色;2 代表RGB模式,后面三位为RGB数值。前后仍可使用SRG参数

例子:

echo  -e "\033[1;38;2;255;85;85mI ♡  You \e[0m"

附:经测试,在不是用SRG参数的情况下,可将;替换为:但在使用SRG参数时无效。 即:echo -e "\033[38:2:255:85:85mI ♡ You \e[0m"

256色模式

输入图片说明

使用方式:

ESC[ … 38;5;<n> … m Select foreground color
ESC[ … 48;5;<n> … m Select background color

例子:

echo  -e "\033[1;38;5;9mI ♡  You \e[0m"

SRG控制参数

| 0  |   关闭所有格式,还原为初始状态 | 
| 1  |    粗体/高亮显示                       | 
| 2  |     模糊(※)                          | 
| 3  |     斜体(※)                          | 
| 4  |     下划线(单线)                    | 
| 5  |     闪烁(慢)                          | 
| 6  |     闪烁(快)(※)                 | 
| 7  |     交换背景色与前景色              | 
| 8  |     隐藏(伸手不见五指,啥也看不见)(※) | 

(1)其中含有(※)标注的编码表示不是所有的终端仿真器都支持,只有少数仿真器支持。

(2)多个SGR参数可以组合使用,例如:echo -e "\x1b[31;4mRed Underline Text\e[0m"输出红色下划线字体“Red Underline Text”。

(3)更多参数信息请参考“ANSI escape code”。

各语言下的控制台颜色输出

PHP

// hello.php
<?php
echo "\033[1;38;5;9mI ♡  You \e[0m\n";

请注意此处使用的是"而不是单引号,因为颜色代码需要转义,正如echo-e一样。

C

// hello.c
#include <stdio.h>
int main() {
    printf("\033[1;31mI ♡  You \e[0m\n");
}

编译:gcc hello.c

运行:./a.out

C++

// hello.cpp
#include <iostream>
int main() {
    std::cout << "\033[1;31mI ♡  You \e[0m" << std::endl;
}

编译:g++ hello.cpp

运行:./a.out

Java

// hello.java
class hello {
    public static void main(String[] args) {
       System.out.println("\033[1;31mI ♡  You \033[0m");
    }
}

注:Java中不能识别\e和\0x1b,仅可使用\033。

编译:javac hello.java

运行:java hello

Python

# hello.py
print "\033[1;31mI ♡  You \x1b[0m"

注:python(v2.6.5)中不能识别\e,可以使用\033和\x1b。

运行:python hello.py

相关链接

PHP Color Class

wikipedia ANSI_escape_code

LINUX彩色的终端命令行 - 使用 ANSI 色彩代码

Linux终端和win32控制台文本颜色输出

教你写一个color日志库,不止有代码还有原理

© 著作权归作者所有

上一篇: Golang的docker尝试
下一篇: PHP7新建扩展
dingdayu

dingdayu

粉丝 34
博文 119
码字总数 59598
作品 3
海淀
后端工程师
私信 提问
加载中

评论(1)

雪吖头
雪吖头
异曲同工。
Spring Boot 2.0.0参考手册_中文版_Part IV_26

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 26. Logging Spring Boot所有的内部日志都采用Commons Logging,但开放了底层的日志实现。提供了对Java Util Logging,Log4J2和Logback的...

Quincuntial
2017/01/09
0
0
MFC应用程序中添加控制台窗口

在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息;另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行。 其实有一种方法可以更为...

qq_26671365
2017/07/11
0
0
第五章:SpringBoot 修改启动的Banner

1.设置显示,隐藏banner 在SpringBoot启动的时候,默认的会展示出一个spring的logo,这个图案我们是可以自定义的 默认LOGO--spring public static void main(String[] args) { //隐藏banner启...

Sunny丶today
2017/11/22
0
0
Spring Boot 2.0.0参考手册_中英文对照_Part IV_26

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 26. Logging Spring Boot uses Commons Logging for all internal logging, but leaves the underlying log implementation open. Defaul......

Quincuntial
2017/01/09
0
0
让控制台支持 ANSI 转义序列,输出下划线、修改颜色或其他控制

版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/)...

謎之E菌
2018/08/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
630
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
34
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
19
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
57
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
62
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部