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

时间:2014-12-10 09:51:37

标签: linux bash terminal stdout

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

enter image description here

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

谢谢!

6 个答案:

答案 0 :(得分:25)

由于许多程序只能输出颜色序列,如果它们的标准输出是一个终端,这个问题的一般解决方案需要诱使他们相信他们写入的管道是终端。使用bsdutils:{/ p>中的script命令可以实现这一点

script -q -c "vagrant up" filename.txt

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

script -q -c "vagrant up" filename > /dev/null

只会将其写入文件。

答案 1 :(得分:10)

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

echo a | grep --color=always . > colour.txt
cat colour.txt

但是,如果某些程序的输出没有输入到终端(这就是为什么我必须使用--color-always和{{} {1}})。

答案 2 :(得分:6)

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

echo -e '\E[37;44m'"Hello World" > my_file

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

使用tee

< command line > |tee -a 'my_colour_file'

在cat中打开文件

cat 'my_colour_file'

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

例如

创建命名管道

mkfifo pipe.fifo

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

<command line> > pipe.fifo

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

cat pipe.fifo > 'my_log_file_with_colours'

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

答案 3 :(得分:1)

我发现使用名为 ansi2html.sh

的工具

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

使用它的命令是:

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

答案 4 :(得分:1)

解决方案

$ script -q /dev/null -c "your command" > log.txt
$ cat log.txt

说明

根据script的{​​{3}},--quit选项只能确保be quiet (do not write start and done messages to standard output)。这意味着开始和完成消息将始终写入文件。

为了利用脚本并将输出文件丢弃在同一文件中,我们只需为其指定空设备/dev/null!另外,将输出重定向到我们想要的目的地,然后将颜色内容写入目的地。

答案 5 :(得分:0)

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

script -q -c "ls --color=always" /tmp/t

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

ls --color=always | ansi2html > /tmp/t.html

安装ahawkhtmltopdf以生成漂亮的 PDF

ls --color=always | aha | wkhtmltopdf - /tmp/t.pdf

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

ls --color=always | tee /dev/stderr | aha | wkhtmltopdf - /tmp/test.pdf