• 请不要在回答技术问题时复制粘贴 AI 生成的内容
css3
V2EX  ›  程序员

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

  •  
  •   css3 · Apr 29, 2021 · 3242 views
    This topic created in 1857 days ago, the information mentioned may be changed or developed.

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

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

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

    6 replies    2021-04-29 22:08:12 +08:00
    css3
        1
    css3  
    OP
       Apr 29, 2021
    解决了:
    unbuffer ansible -m ping localhost| tee -a ret.log

    美中不足的是,这样日志里边也加了一些颜色的符号这种 ^[[0;32 ^[[0m
    FragmentLs
        2
    FragmentLs  
       Apr 29, 2021
    可以加 sed 去掉 ascii 颜色码,不过读取日志才 escape 掉 ascii 码更香
    CatCode
        3
    CatCode  
       Apr 29, 2021
    似乎不是 tee 的问题 而是前面的那个命令的程序 在检测到输出不是 stdout 而是一个管道的时候,就会自动忽略掉颜色
    很多 gnu coreutils 也有类似的设计
    CNife
        4
    CNife  
       Apr 29, 2021
    这个确实不能两全其美。或许可以写个 ctee 程序( colored tee ),假装自己是个终端,让程序输出带有颜色代码的内容,自己一方面直接把有颜色代码的内容写到终端上,另一方面去掉颜色代码写入指定的文件。
    CNife
        5
    CNife  
       Apr 29, 2021
    @CNife #4 不过这也有问题,如果程序的彩色输出不仅加了彩色代码,还有布局上的问题,比如进度条之类的,就不能简单去掉颜色代码了。
    ysc3839
        6
    ysc3839  
       Apr 29, 2021 via Android
    @CNife 布局问题可以忽略,因为这种情况下用 tee 也会有一大堆不容易读的数据输出。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2702 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:11 · PVG 14:11 · LAX 23:11 · JFK 02:11
    ♥ Do have faith in what you're doing.