我使用的各种bash命令--奇特的diffs、构建脚本等--都会产生大量的颜色输出。
当我将此输出重定向到一个文件,然后稍后对该文件执行cat或less操作时,着色就消失了--大概b/c重定向输出的操作去掉了告诉终端更改颜色的颜色代码。
有没有一种方法可以捕获着色输出,包括着色?
发布于 2010-08-19 02:19:34
捕获彩色输出的一种方法是使用script命令。运行script将启动一个bash会话,其中所有原始输出都被捕获到一个文件(缺省情况下名为typescript )。
发布于 2010-08-19 02:30:21
重定向不会剥离颜色,但许多命令会检测到它们何时将输出发送到终端,如果不是,默认情况下不会生成颜色。例如,在Linux上,如果输出到管道或文件中,ls --color=auto (在很多地方都别名为普通的ls )不会生成颜色代码,但ls --color会生成颜色代码。许多其他工具都有类似的覆盖标志,以使它们将彩色输出保存到文件中,但这都是特定于单个工具的。
即使在文件中有了颜色代码,要查看它们,您也需要使用一个工具来保持它们的完整性。less有一个-r标志,用于在“原始”模式下显示文件数据;这将显示颜色代码。编辑:稍新的版本也有一个-R标志,它可以识别颜色代码并正确地显示它们,与原始模式相比,它对换行/修剪等功能有更好的支持,因为less可以区分哪些是控制代码,哪些是显示在屏幕上的字符。
发布于 2017-03-06 17:19:08
受其他答案的启发,我开始使用script。不过,我不得不使用-c才能让它工作。所有其他答案,包括tee,不同的script示例对我都不起作用。
上下文:
在使用python的subprocess.check_call()进行测试期间,
behave和启动外壳命令运行行为测试解决方案:
script --flush --quiet --return /tmp/ansible-output.txt --command "my-ansible-command"开关说明:
需要
--flush,因为否则输出不能很好地实时观察,大chunks--quiet会抑制自己的脚本输出tool-c, --command直接提供要执行的命令,从我的命令到脚本的管道对我不起作用(没有colors)--return使脚本传播我的命令的退出代码,因此我知道我的命令是否失败https://stackoverflow.com/questions/3515208
复制相似问题