ata*_*lor 52
捕获彩色输出的一种方法是使用该script命令.运行script将启动一个bash会话,其中所有原始输出都被捕获到一个文件(typescript默认命名).
Wal*_*ndt 34
重定向不会剥离颜色,但许多命令会检测它们何时向终端发送输出,如果没有,则默认情况下不会生成颜色.例如,在Linux上ls --color=auto(ls在许多地方使用别名),如果输出到管道或文件,将不会产生颜色代码,但是ls --color会.许多其他工具具有类似的覆盖标记,以使它们将彩色输出保存到文件中,但它们都是特定于单个工具的.
即使您在文件中有颜色代码,要查看它们,您还需要使用保持原封不动的工具. less有一个-r标志以"原始"模式显示文件数据; 这会显示颜色代码. 编辑:稍微更新的版本也有一个-R标志,它特别注意颜色代码并正确显示它们,更好地支持换行/修剪比原始模式,因为较少可以分辨哪些是控制代码,哪些是实际字符去屏幕.
gee*_*ekQ 13
受其他答案的启发,我开始使用script.我不得不用-c它来使它工作.所有其他答案,包括tee不同的script例子对我来说都不起作用.
语境:
behave在使用python的测试期间使用和启动shell命令运行行为测试subprocess.check_call()解:
script --flush --quiet --return /tmp/ansible-output.txt --command "my-ansible-command"
Run Code Online (Sandbox Code Playgroud)
开关说明:
--flush 需要,因为否则输出不是很好的可观察的,大块的--quiet 压制脚本工具自己的输出-c, --command 直接提供执行命令,从我的命令管道到脚本对我不起作用(没有颜色)--return 使脚本传播我的命令的退出代码,以便我知道我的命令是否失败我发现在使用script时保持颜色less并不能真正起作用(少了很多都搞砸了,退出时,bash都搞砸了)因为交互性较少.script似乎真的搞乱了stdin即使退出后的输入.
所以不是运行:
script -q /dev/null cargo build | less -R
Run Code Online (Sandbox Code Playgroud)
/dev/null在管道到较少之前我重定向到它:
script -q /dev/null cargo build < /dev/null | less -R
Run Code Online (Sandbox Code Playgroud)
所以现在script不要惹麻烦,stdin让我得到我想要的东西.它相当于command | less但保留了颜色,同时还继续读取附加到文件的新内容(我试过的其他方法不会这样做).