Linux下终端控制台字体颜色
在使用putty、secureCRT、XShell等终端仿真器连接linux系统时,ls、vim等工具的输出都含有各种颜色,这些颜色的输出大大地增强了文本的可读性。
通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:echo -e "\033[31mRed Text\033[0m",可以输出红色的字体“Red Text”。其中:"\033[31m"和"\033[0m"是ANSI转义序列(ANSI escape code/sequence),它控制文本输出的格式、颜色等,大多数的类unix终端仿真器都能够解释ANSI转义序列。
通用的控制文本颜色的转义序列格式如下:
CSI n1 [;n2 [;…]] m
其中CSI全称为“控制序列引导器”(Control Sequence Introducer/Initiator),也就是上述示例中的"\033["(其中\033是你键盘左上角Esc键对应的ascii码(八进制));n1、n2等表示SGR参数(下面会列出一些常用的SGR参数),用于控制颜色、粗体、斜体、闪烁等文本输出格式;m表示转义序列结束。
注:\033是键盘左上角Esc键对应的ASCII码(8进制),\033、\x1b和\e效果一样, 例如:echo -e "\x1b[31mRed Text\e[0m"也输出红色字体“Red Text”。
常用的SRG参数列表如下:
编码 | 说明 |
0 | 关闭所有格式,还原为初始状态 |
1 | 粗体/高亮显示 |
2 | 模糊(※) |
3 | 斜体(※) |
4 | 下划线(单线) |
5 | 闪烁(慢) |
6 | 闪烁(快)(※) |
7 | 交换背景色与前景色 |
8 | 隐藏(伸手不见五指,啥也看不见)(※) |
30-37 | 前景色,即30+x,x表示不同的颜色(参见下面的“颜色表”) |
40-47 | 背景色,即40+x,x表示不同的颜色(参见下面的“颜色表”) |
注:(1)其中含有(※)标注的编码表示不是所有的终端仿真器都支持,只有少数仿真器支持。
(2)多个SGR参数可以组合使用,例如:echo -e "\x1b[31;4mRed Underline Text\e[0m"输出红色下划线字体“Red Underline Text”。
(3)更多参数信息请参考“ANSI escape code”。
颜色表:
颜色值x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
颜色 | 黑 | 红 | 绿 | 黄 | 蓝 | 紫 | 青 | 白 |
演示代码非常简单,直接按照上面组合输入就行:
fmt.Println("\033[31;4mRed Underline Text\033[0m\n")
下面有对这个功能的简单封装:
https://github.com/xcltapestry/xclpkg/blob/master/clcolor/clcolor.go
参考资料:
Linux终端输出颜色控制
http://blog.chinaunix.net/uid-29555318-id-4479619.html
给终端来点彩色(c语言和Golang版)
http://studygolang.com/articles/2032
Linux终端输出颜色控制
http://ju.outofmemory.cn/entry/26528
WIN下终端控制台字体颜色
win控制台不支持ANSI转义序列,因此要让win32控制台输出颜色文本相对复杂一些。
这里我们借助SetConsoleTextAttribute和GetStdHandle两个win32 API函数输出颜色,示例如下:
WIN下控制台输出带颜色的文本:
代码:
package main
import (
"fmt"
"syscall"
)
type (
HANDLE uintptr
WORD uint16
DWORD uint32
)
const (
STD_OUTPUT_HANDLE = 0xFFFFFFF5
FOREGROUND_BLUE = 0x01
FOREGROUND_GREEN = 0x02
FOREGROUND_RED = 0x04
FOREGROUND_INTENSITY = 0x08
BACKGROUND_BLUE = 0x10
BACKGROUND_GREEN = 0x20
BACKGROUND_RED = 0x40
BACKGROUND_INTENSITY = 0x80
)
var (
modkernel32 = syscall.NewLazyDLL("kernel32.dll")
procGetStdHandle = modkernel32.NewProc("GetStdHandle")
procSetConsoleTextAttribute = modkernel32.NewProc("SetConsoleTextAttribute")
)
func GetStdHandle(nStdHandle DWORD) HANDLE {
ret, _, _ := procGetStdHandle.Call(uintptr(nStdHandle))
return HANDLE(ret)
}
func SetConsoleTextAttribute(hConsoleOutput HANDLE, wAttributes WORD) bool {
ret, _, _ := procSetConsoleTextAttribute.Call(
uintptr(hConsoleOutput),
uintptr(wAttributes))
return ret != 0
}
func main() {
for color := 0; color < 8; color++ {
textbackground(color)
fmt.Printf("This is color %d\n", color)
fmt.Printf("Press any key to continue\n")
fmt.Scanln()
}
}
func textbackground(color int) {
hOut := GetStdHandle(STD_OUTPUT_HANDLE)
SetConsoleTextAttribute(hOut, WORD(color))
}
执行效果截图:
参考资料:
Python实现修改Windows CMD命令行输出颜色(完全解析)
http://my.oschina.net/bluefly/blog/311209
Linux终端和win32控制台文本颜色输出
http://www.cnblogs.com/crabxx/p/4046498.html
Golang如何在终端输出带颜色的字体?
http://www.epooll.com/archives/770/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
2011-01-22 Centos 下查看服务器CPU的信息