我想在控制台的标准输出中看到颜色输出,但我想在tee
命令输出的捕获副本中将其删除。就我而言,
command_that_writes_color_to_stdout | 三通文件
我希望文件中没有 ANSI 颜色序列等,因为它使grep
以后的日志文件变得有趣:
echo -e "color \033[1;31mRED\033[0m output" | tee test.log
在这种情况下,颜色被写入控制台并写入文件“test.log”。
color ^[[1;31mRED^[[0m output
有没有办法只为tee
文件的输出去除 ANSI 序列?
试图让 tee 看到我的终端不知道颜色(环境变量、子外壳),但很tee
高兴只写它给出的内容。我想要控制台输出的颜色(供人类消费,这很棒),但不希望输出的日志文件副本中的颜色。
echo -e "color \033[1;31mRED\033[0m output" | TERM=dumb tee test.log ; od -c test.log
我发现很多人想要在他们的“piped to tee”输出中使用颜色代码(通常是当第一个程序知道可以显示颜色的东西时),但我没有找到相反的问题/答案。
如果您使用的是 bash,则可以删除所有颜色(图形再现)
或所有ANSI 转义序列
(我已经对此进行了测试,但并不详尽。)
PS 如果要附加到日志文件,
>> test.log
请在括号内使用;tee -a
不会的。使用
zsh
, 和ansi2txt
来自colorized-logs ¹:当 fd 被多次重定向以进行写入时,zsh 确实实现了类似 tee 的行为。
¹ 它在 Debian/Ubuntu 的同名软件包中可用,但请注意该算法相当粗糙,请参阅从脚本输出中删除控制字符(包括控制台代码/颜色)以获得可能更精细/更紧密的着色过滤器。