如何在awk文件中通过tput数字配置颜色变量?
在awk中通过tput设置颜色变量的正确方法
你的代码无法生效的核心问题是:awk的system()函数返回的是命令的退出状态码(0为成功,非0为失败),而不是tput输出的ANSI颜色控制码。直接把system()的返回值赋值给变量,最终打印的只是数字,不会产生颜色效果。
正确的做法是用getline捕获tput命令的输出内容,将ANSI控制码存入变量:
awk 'BEGIN { # 捕获tput输出的颜色控制码,用完后关闭管道避免资源泄漏 "tput sgr0" | getline sgr; close("tput sgr0") "tput bold setaf 15" | getline wht; close("tput bold setaf 15") "tput bold setaf 39" | getline blu; close("tput bold setaf 39") } /Code:$/ { kl=1 ; next } !NF { kl=0 } kl { printf("%s%s%s\n", blu, $0, sgr) } !kl { printf("%s%s%s\n", wht, $0, sgr) } ' <<< "$@"
关键优化点
- 使用
tput bold setaf 15替代tput bold; tput setaf 15:tput支持一次性传入多个参数,减少进程调用次数,更高效。 - 调用
close()关闭管道:避免awk长时间持有未关闭的管道句柄,防止资源泄漏。 - 用
\n替代直接换行:让printf的格式更规范,跨环境兼容性更好。
内容的提问来源于stack exchange,提问作者Dilna
相关产品推荐
相关产品推荐

