Linux 的 tee 命令如何在屏幕输出的时候保留高亮的颜色?

2021-04-29 17:26:44 +08:00
 css3

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

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

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

2284 次点击
所在节点    程序员
6 条回复
css3
2021-04-29 17:44:52 +08:00
解决了:
unbuffer ansible -m ping localhost| tee -a ret.log

美中不足的是,这样日志里边也加了一些颜色的符号这种 ^[[0;32 ^[[0m
FragmentLs
2021-04-29 19:31:49 +08:00
可以加 sed 去掉 ascii 颜色码,不过读取日志才 escape 掉 ascii 码更香
CatCode
2021-04-29 20:23:21 +08:00
似乎不是 tee 的问题 而是前面的那个命令的程序 在检测到输出不是 stdout 而是一个管道的时候,就会自动忽略掉颜色
很多 gnu coreutils 也有类似的设计
CNife
2021-04-29 20:35:55 +08:00
这个确实不能两全其美。或许可以写个 ctee 程序( colored tee ),假装自己是个终端,让程序输出带有颜色代码的内容,自己一方面直接把有颜色代码的内容写到终端上,另一方面去掉颜色代码写入指定的文件。
CNife
2021-04-29 20:37:17 +08:00
@CNife #4 不过这也有问题,如果程序的彩色输出不仅加了彩色代码,还有布局上的问题,比如进度条之类的,就不能简单去掉颜色代码了。
ysc3839
2021-04-29 22:08:12 +08:00
@CNife 布局问题可以忽略,因为这种情况下用 tee 也会有一大堆不容易读的数据输出。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/774161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX