Linux 下动态输出的日志信息应该如何保存?

2022-07-11 17:45:27 +08:00
 dier
我发现在 Linux 环境下有些命令执行时在屏幕上输出的内容使用`>`或`>>`输出到指定文件,事后通过`cat`或`less`命令查看文件内容时会有不现的情况出现。例如`docker-compose -f file.yaml pull > /tmp/pull.log`拉取镜像过程有进度的输出,以及使用`docker-compose`执行后显示的那种带绿色的输出信息,虽然记录到了指定文件,但使用`cat /tmp/pull.log`查看时会把这个过程播放一遍,然后显示空白,而不是显示全部内容




如果用`less`或`windows`下的编辑器打开,又会显示如下的情况




想问一下大家是怎么从这种情况下记录下输出的日志信息。
1058 次点击
所在节点    问与答
8 条回复
masker
2022-07-11 18:13:46 +08:00
tee
ysc3839
2022-07-11 18:36:19 +08:00
所以你是想实现什么?只想保存最终屏幕上显示的结果,不要中间过程?那可以在 tmux 中执行,执行完保存一下。
reter
2022-07-11 18:45:32 +08:00
docker-compose 输出带转义序列的编码(ANSI 颜色代码, ANSI escape sequences, ANSI color codes)的日志,最好的做法是除掉转义。

0. 关闭 compose 的 ansi 输出. 看文档似乎 --no-ansi 可以关闭
1. 输出管道中间加个可以去除转义的程序, ansi2txt 或者 sed 替换
2. 切换到 非 tty 模式(一般程序检测到 tty 才会输出颜色编码), 比如 ls -cl < /dev/null |& cat

搜索关键词:drop ANSI color codes,
dier
2022-07-11 19:37:58 +08:00
@ysc3839 我是希望能保存屏幕上显示的结果,因为显示的结果有参考意义
dier
2022-07-11 19:40:06 +08:00
@masker 1# 好像 docker-compose 的有些信息还是不能记录下来。我明天试试
@reter 3# 的方法
webcape233
2022-07-11 20:46:10 +08:00
请了解 标准输出和标准错误输出
choury
2022-07-11 20:55:28 +08:00
你输出到文件当然就显示不了颜色也没法光标移动到开头覆盖这行了。如果只是想展示的效果一样,cat 这个文件就行
asan2006
2022-07-11 21:33:14 +08:00
6 楼正解,xxx.sh > log.txt 2>&1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/865483

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX