网站首页 > 技术文章 正文
技术背景
在Linux系统中,有时需要改变echo命令输出的颜色,以提高信息的可读性和区分度。实现这一目的通常借助ANSI转义码或者tput命令。ANSI转义码是一套用于控制终端文本显示格式(如颜色、样式等)的代码,而tput命令则是一个更为通用和可移植的工具,它可以根据终端类型生成相应的控制代码。
实现步骤
使用ANSI转义码
- 了解ANSI颜色代码:ANSI颜色代码由一系列数字组成,用于指定文本的颜色和样式。例如,30 - 37用于设置前景色,40 - 47用于设置背景色。
- 在脚本中使用ANSI转义码:在echo命令中使用-e选项以允许解释转义字符,然后插入相应的ANSI转义码。
示例代码如下:
RED='\033[0;31m'
NC='\033[0m' # No Color
echo -e "I ${RED}love${NC} Stack Overflow"
使用tput命令
- 了解tput子命令:tput提供了许多子命令,用于设置不同的终端属性,如颜色、样式、光标位置等。
- 在脚本中使用tput命令:可以直接调用tput命令,也可以将其输出保存到变量中使用。
示例代码如下:
# 直接调用
tput setaf 1; echo "this is red text"
# 使用变量
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
echo "${red}red text ${green}green text${reset}"
# 命令替换
echo "$(tput setaf 1)Red text $(tput setab 7)and white background$(tput sgr 0)"
核心代码
ANSI转义码常用颜色变量定义
# Reset
Color_Off='\033[0m' # Text Reset
# Regular Colors
Black='\033[0;30m' # Black
Red='\033[0;31m' # Red
Green='\033[0;32m' # Green
Yellow='\033[0;33m' # Yellow
Blue='\033[0;34m' # Blue
Purple='\033[0;35m' # Purple
Cyan='\033[0;36m' # Cyan
White='\033[0;37m' # White
# Bold
BBlack='\033[1;30m' # Black
BRed='\033[1;31m' # Red
BGreen='\033[1;32m' # Green
BYellow='\033[1;33m' # Yellow
BBlue='\033[1;34m' # Blue
BPurple='\033[1;35m' # Purple
BCyan='\033[1;36m' # Cyan
BWhite='\033[1;37m' # White
# Underline
UBlack='\033[4;30m' # Black
URed='\033[4;31m' # Red
UGreen='\033[4;32m' # Green
UYellow='\033[4;33m' # Yellow
UBlue='\033[4;34m' # Blue
UPurple='\033[4;35m' # Purple
UCyan='\033[4;36m' # Cyan
UWhite='\033[4;37m' # White
# Background
On_Black='\033[40m' # Black
On_Red='\033[41m' # Red
On_Green='\033[42m' # Green
On_Yellow='\033[43m' # Yellow
On_Blue='\033[44m' # Blue
On_Purple='\033[45m' # Purple
On_Cyan='\033[46m' # Cyan
On_White='\033[47m' # White
# High Intensity
IBlack='\033[0;90m' # Black
IRed='\033[0;91m' # Red
IGreen='\033[0;92m' # Green
IYellow='\033[0;93m' # Yellow
IBlue='\033[0;94m' # Blue
IPurple='\033[0;95m' # Purple
ICyan='\033[0;96m' # Cyan
IWhite='\033[0;97m' # White
# Bold High Intensity
BIBlack='\033[1;90m' # Black
BIRed='\033[1;91m' # Red
BIGreen='\033[1;92m' # Green
BIYellow='\033[1;93m' # Yellow
BIBlue='\033[1;94m' # Blue
BIPurple='\033[1;95m' # Purple
BICyan='\033[1;96m' # Cyan
BIWhite='\033[1;97m' # White
# High Intensity backgrounds
On_IBlack='\033[0;100m' # Black
On_IRed='\033[0;101m' # Red
On_IGreen='\033[0;102m' # Green
On_IYellow='\033[0;103m' # Yellow
On_IBlue='\033[0;104m' # Blue
On_IPurple='\033[0;105m' # Purple
On_ICyan='\033[0;106m' # Cyan
On_IWhite='\033[0;107m' # White
使用tput命令的示例函数
function coloredEcho(){
local exp=$1;
local color=$2;
if ! [[ $color =~ '^[0-9]#39; ]] ; then
case $(echo $color | tr '[:upper:]' '[:lower:]') in
black) color=0 ;;
red) color=1 ;;
green) color=2 ;;
yellow) color=3 ;;
blue) color=4 ;;
magenta) color=5 ;;
cyan) color=6 ;;
white|*) color=7 ;; # white or invalid color
esac
fi
tput setaf $color;
echo $exp;
tput sgr0;
}
最佳实践
- 使用函数封装:将颜色设置和输出逻辑封装到函数中,提高代码的复用性和可维护性。
- 使用tput提高可移植性:tput命令会根据终端类型生成相应的控制代码,因此更具可移植性,建议优先使用。
- 及时重置颜色:在每次颜色设置后,使用重置代码(如\033[0m或tput sgr0)将颜色和样式恢复到默认状态,避免影响后续输出。
常见问题
- ANSI转义码不生效:可能是因为没有使用echo -e选项,或者终端不支持ANSI转义码。可以尝试使用tput命令来解决。
- 在特殊bash变量中使用ANSI转义码出现问题:如果在PS0、PS1、PS2、PS4等特殊bash变量中使用ANSI转义码,需要添加额外的转义字符\[和\],以确保bash能够正确解释它们。
- 颜色显示不一致:不同的终端可能对颜色的显示有所差异,建议使用tput命令来提高颜色显示的一致性。
猜你喜欢
- 2025-06-08 Java使用输出流OutputStream导出Excel遇到的问题及解决方法
- 2025-06-08 解决Windows 10安装失败或卡18%,62%等
- 2025-06-08 人是由三部分(身体、精神、灵魂)组成的生灵
- 2025-06-08 Flink Collector Output 接口源码解析
- 2025-06-08 录像机认识及安装环境介绍
- 2025-06-08 利用GrayLog的output功能实现简单的GrayLog分布式级联
- 2025-06-08 用python轻轻松松写一个录屏工具
- 2025-06-08 基于Amos路径分析的软件输出结果界面与参数详解
- 2025-06-08 Java 面向对象——测试题,笔试,快进来考考你自己
- 2025-06-08 Changsha's Automobile Output Expected to Exceed 1 Million Units This Year
- 06-22Python开发工程师必会的3个设计模式(工厂、单例、适配器)
- 06-22创建型设计模式——工厂模式和抽象工厂模式
- 06-221. 工厂模式详解
- 06-22工厂模式详解
- 06-22设计模式问题:说一说简单工厂模式?
- 06-22深入设计模式:工厂方法
- 06-22C++设计模式——简单工厂模式
- 06-22什么是工厂模式?工厂模式有哪些类型?如何使用它们?
- 最近发表
- 标签列表
-
- axure 注册码 (25)
- exploit db (21)
- mutex_lock (30)
- oracleclient (27)
- think in java (14)
- javascript权威指南 (19)
- nfs (25)
- componentart (17)
- yii框架 (14)
- springbatch (28)
- oracle数据库备份 (25)
- iptables (21)
- 自动化单元测试 (18)
- mvc模式 (13)
- python编写软件 (14)
- dir (26)
- connectionstring属性尚未初始化 (23)
- output (32)
- panel滚动条 (28)
- centos 5 4 (23)
- sql学习 (33)
- dfn (14)
- http error 503 (21)
- pop3服务器 (18)
- 图表组件 (17)