管道输送至 T 恤时保留颜色

管道输送至 T 恤时保留颜色
ls -l --color=auto | tee output.log

如果没有管道/三通,它就是彩色的。我怎样才能让它在使用时保持彩色tee(只能在屏幕上着色,我不关心日志中的颜色)。

答案1

只需在任何命令前插入unbuffer,即可使其认为正在写入交互式输出,即使它实际上是通过管道传输到另一个可执行文件中。这样可以保留颜色ls

例如

unbuffer ls -l --color=auto | tee output.log

如果您尚未安装它,您可以在 Ubuntu 和其他 Debian-ish Linux 发行版上unbuffer通过以下方式安装。

sudo apt-get install expect-dev

答案2

使用 ls 选项--color=always

--color=auto不会将颜色输出到管道-原因很明显。

手册ls页内容如下:

使用 --color=auto 时,仅当标准输出连接到终端 (tty) 时才会输出颜色代码。

答案3

我将扩展script已接受答案的评论中给出的解决方案。script如果您无法或不想安装预计包含该unbuffer命令的包。

打印 ls输出到标准输出和文件使用颜色代码

script -efq output.log -c "ls -l --color=auto"

在哪里 (man script):

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

看法带有颜色的输出文件:

less -r output.log

答案4

这是一个基于的函数这个干净的答案我无法在评论中发表意见。

output()
{
    output_file=$1
    shift
    command=$@
   
    script -efq $output_file -c "$command"
    less $output_file
}

用法

output file command

相关内容