首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以通过shell重定向捕获着色输出?

是否可以通过shell重定向捕获着色输出?
EN

Stack Overflow用户
提问于 2010-08-19 02:11:28
回答 7查看 35.1K关注 0票数 93

我使用的各种bash命令--奇特的diffs、构建脚本等--都会产生大量的颜色输出。

当我将此输出重定向到一个文件,然后稍后对该文件执行catless操作时,着色就消失了--大概b/c重定向输出的操作去掉了告诉终端更改颜色的颜色代码。

有没有一种方法可以捕获着色输出,包括着色?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-08-19 02:19:34

捕获彩色输出的一种方法是使用script命令。运行script将启动一个bash会话,其中所有原始输出都被捕获到一个文件(缺省情况下名为typescript )。

票数 72
EN

Stack Overflow用户

发布于 2010-08-19 02:30:21

重定向不会剥离颜色,但许多命令会检测到它们何时将输出发送到终端,如果不是,默认情况下不会生成颜色。例如,在Linux上,如果输出到管道或文件中,ls --color=auto (在很多地方都别名为普通的ls )不会生成颜色代码,但ls --color会生成颜色代码。许多其他工具都有类似的覆盖标志,以使它们将彩色输出保存到文件中,但这都是特定于单个工具的。

即使在文件中有了颜色代码,要查看它们,您也需要使用一个工具来保持它们的完整性。less有一个-r标志,用于在“原始”模式下显示文件数据;这将显示颜色代码。编辑:稍新的版本也有一个-R标志,它可以识别颜色代码并正确地显示它们,与原始模式相比,它对换行/修剪等功能有更好的支持,因为less可以区分哪些是控制代码,哪些是显示在屏幕上的字符。

票数 44
EN

Stack Overflow用户

发布于 2017-03-06 17:19:08

受其他答案的启发,我开始使用script。不过,我不得不使用-c才能让它工作。所有其他答案,包括tee,不同的script示例对我都不起作用。

上下文:

在使用python的subprocess.check_call()进行测试期间,

  • Ubuntu16.04
  • 使用behave和启动外壳命令运行行为测试

解决方案:

代码语言:javascript
复制
script --flush --quiet --return /tmp/ansible-output.txt --command "my-ansible-command"

开关说明:

需要

  • --flush,因为否则输出不能很好地实时观察,大chunks
  • --quiet会抑制自己的脚本输出tool
  • -c, --command直接提供要执行的命令,从我的命令到脚本的管道对我不起作用(没有colors)
  • --return使脚本传播我的命令的退出代码,因此我知道我的命令是否失败
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3515208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档