技术解析

Linux 的 tee 命令如何在屏幕输出的时候保留高亮的颜色?
0
2021-06-02 15:44:19
idczone

我在执行一条命令,命令本身在屏幕输出的时候是有高亮的颜色的,我用 tee 来一边输出到屏幕,一边写日志:

ansible -m ping localhost| tee -a ret.log

但这样指令在屏幕上输出的原本的颜色被 tee 完全忽略了,全变成了黑底白字了,用 tee 的时候咋在屏幕保留高亮的色呢?看了下 --help 也没找到 colour 相关的东西, PS: 最好不要再安装其国外服务器他工具了


解决了:
unbuffer ansible -m ping localhost| tee -a ret.log
美中不足的是,这样日志里边也加了一些颜色的符号这种 ^[[0;32 ^[[0m

可以加 sed 去掉 ascii 颜色码,不过读取日志才 escape 掉 ascii 码更香

似乎不是 tee 的问题 而是前面的那个命令的程序 在检测到输出不是 stdout 而是一个管道的时候,就会自动忽略掉颜色
很多 gnu coreutils 也有类似的设计

这个确实不能两全其美。或许可以写个 ctee 程序( colored tee ),假装自己是个终端,让程序输出带有颜色代码的内容,自己一方面直接把有颜色代码的内容写到终端上,另一方面去掉颜色代码写入指定的文件。

不过这也有问题,如果程序的彩色输出不仅加了彩色代码,还有布局上的问题,比如进度条之类的,就不能简单去掉颜色代码了。

布局问题可以忽略,因为这种情况下用 tee 也会有一大堆不容易读的数据输出。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服