如何将stdout写入带有颜色的文件?

AAl*_*lvz 35 linux bash terminal stdout

很多时候(并非总是)stdout以颜色显示.通常我也会将每个输出日志保存在不同的文件中.当然在文件中,颜色不再显示.

在此输入图像描述

我想知道是否有一种方法(在linux中)将输出写入带有颜色的文件.我正在尝试将teevagrant的输出写入文件,这样我仍然可以看到输出(当它适用时).我想专门为流浪者使用它(它可能会在将来改变,当然......)

谢谢!

Win*_*ute 30

由于许多程序只会输出颜色序列,如果它们的stdout是终端,这个问题的一般解决方案需要诱使他们相信他们写入的管道是终端.使用scriptbsdutils中的命令可以实现这一点:

script -q -c "vagrant up" filename.txt
Run Code Online (Sandbox Code Playgroud)

这会将输出写入vagrant upfilename.txt(和终端).如果不希望回音,

script -q -c "vagrant up" filename > /dev/null
Run Code Online (Sandbox Code Playgroud)

将它只写入文件.

  • 对于Mac OSX:`script -q filename.txt vagrant up`有效.`usage:script [-adkpqr] [-t time] [file [command ...]]` (3认同)
  • 实际上,`script`非常轻巧.大多数情况下它只是打开一个pty,生成一个shell并将输出管道输送给你.总共有大约500行C代码. (2认同)
  • 我知道我参加聚会迟到了,但是即使带有“-q”标志,也会在文件中添加“脚本开始于Blah blah blah...”。有办法避免这种情况吗? (2认同)

cho*_*oba 11

您可以将输出颜色的ANSI序列保存到文件中:

echo a | grep --color=always . > colour.txt
cat colour.txt
Run Code Online (Sandbox Code Playgroud)

某些程序,但是,往往不是,如果它们的输出不会转到终端(这就是为什么我不得不使用使用它们--color-alwaysgrep).

  • 不管怎样都是红色的 =/ (3认同)

rep*_*ero 6

您还可以使用不同颜色的回声为输出着色,并将彩色输出保存在文件中.例

echo -e '\E[37;44m'"Hello World" > my_file
Run Code Online (Sandbox Code Playgroud)

此外,您还必须熟悉终端颜色代码

使用发球台

< command line > |tee -a 'my_colour_file'
Run Code Online (Sandbox Code Playgroud)

用cat打开你的文件

cat 'my_colour_file'
Run Code Online (Sandbox Code Playgroud)

使用命名管道还可以将带有颜色的管道的所有输出重定向到另一个文件

例如

创建命名管道

mkfifo pipe.fifo
Run Code Online (Sandbox Code Playgroud)

每个命令行将其重定向到管道,如下所示

<command line> > pipe.fifo
Run Code Online (Sandbox Code Playgroud)

在另一个终端中,将所有消息从管道重定向到您的文件

cat pipe.fifo > 'my_log_file_with_colours'
Run Code Online (Sandbox Code Playgroud)

用cat打开你的文件,看看预期的结果.


Pin*_*yni 6

我发现使用名为ansi2html.sh的工具

是将多彩终端数据导出到html文件的最简单的方法,

使用它的命令是:

ls --color=always | ansi2html.sh --palette=solarized > ~/Desktop/ls.html
Run Code Online (Sandbox Code Playgroud)
  • 所需要做的就是使用管道发送输出,然后将标准输出输出到简单的 html 文件


Iva*_*gai 5

在 Ubuntu 中,您可以安装包bsdutils以输出到带有 ANSI 颜色代码文本文件

script -q -c "ls --color=always" /tmp/t
Run Code Online (Sandbox Code Playgroud)

安装kbtin以生成干净的HTML文件:

ls --color=always | ansi2html > /tmp/t.html
Run Code Online (Sandbox Code Playgroud)

安装ahawkhtmltopdf生成一个不错的PDF

ls --color=always | aha | wkhtmltopdf - /tmp/t.pdf
Run Code Online (Sandbox Code Playgroud)

使用以上任何一种方式tee也可以在控制台上显示输出或将副本保存在另一个文件中。例子:

ls --color=always | tee /dev/stderr | aha | wkhtmltopdf - /tmp/test.pdf
Run Code Online (Sandbox Code Playgroud)