V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

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

  •  
  •   css3 · 2021-04-29 17:26:44 +08:00 · 2465 次点击
    这是一个创建于 1299 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    6 条回复    2021-04-29 22:08:12 +08:00
    css3
        1
    css3  
    OP
       2021-04-29 17:44:52 +08:00
    解决了:
    unbuffer ansible -m ping localhost| tee -a ret.log

    美中不足的是,这样日志里边也加了一些颜色的符号这种 ^[[0;32 ^[[0m
    FragmentLs
        2
    FragmentLs  
       2021-04-29 19:31:49 +08:00
    可以加 sed 去掉 ascii 颜色码,不过读取日志才 escape 掉 ascii 码更香
    CatCode
        3
    CatCode  
       2021-04-29 20:23:21 +08:00
    似乎不是 tee 的问题 而是前面的那个命令的程序 在检测到输出不是 stdout 而是一个管道的时候,就会自动忽略掉颜色
    很多 gnu coreutils 也有类似的设计
    CNife
        4
    CNife  
       2021-04-29 20:35:55 +08:00
    这个确实不能两全其美。或许可以写个 ctee 程序( colored tee ),假装自己是个终端,让程序输出带有颜色代码的内容,自己一方面直接把有颜色代码的内容写到终端上,另一方面去掉颜色代码写入指定的文件。
    CNife
        5
    CNife  
       2021-04-29 20:37:17 +08:00
    @CNife #4 不过这也有问题,如果程序的彩色输出不仅加了彩色代码,还有布局上的问题,比如进度条之类的,就不能简单去掉颜色代码了。
    ysc3839
        6
    ysc3839  
       2021-04-29 22:08:12 +08:00 via Android
    @CNife 布局问题可以忽略,因为这种情况下用 tee 也会有一大堆不容易读的数据输出。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:26 · PVG 01:26 · LAX 09:26 · JFK 12:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.