bash - 为标准输出的每一行加时间戳
问题描述
我正在寻求建议。
我想为我的标准输出的每一行设置一个时间戳。
因此,当我使用返回大量信息的脚本时,我可以跟踪每个返回的时间和日期。
我可以轻松地为我所做的每个命令添加一个时间戳,但我无法为每个返回获取它。
谢谢 !
解决方案
不要重新发明轮子,使用现有的解决方案。几乎所有发行版都提供的moreutils
软件包包含ts
. 正是为您的用例编写的:
$ cmd | ts
例如:
$ (echo a; sleep 1; echo b; sleep 3; echo c; sleep 2; echo d; sleep 1) | ts
Feb 09 14:34:51 a
Feb 09 14:34:52 b
Feb 09 14:34:55 c
Feb 09 14:34:57 d
注意:当写入管道而不是终端时,程序的输出将由 libc 块缓冲,而不是在写入终端时默认为行缓冲。
这意味着时间戳将是标准输出被刷新的那一刻,这不一定与写入一行的那一刻相同。stdbuf
可在 Linux 上用于强制行缓冲输出:
stdbuf -oL cmd | ts
PS:在 MacOS 上也有unbuffer
同样的目的
推荐阅读
- python - 我在从 python 脚本进行 api 调用时生成了输出。我只需要该输出中的特定项目
- php - 在 Magento 2.2 上添加额外产品属性的正确方法
- azure - 是否有可能使用 Microsoft Azure Bot Services 创建 Java 聊天机器人?
- excel-formula - 如何通过列传播公式
- python - 在熊猫中如何基于相同的ID遍历两个数据帧
- html - 基于类而不是 id 连接到链接的锚标记
- javascript - 如何避免跳过第二个数组中的数组索引?
- python - Django Rest Framework - 一对多关系不起作用
- spring - Spring Boot、Elasticsearch 6.2.4、Gradle 依赖问题
- reactjs - 如何测试 React 道具中的 html 按钮?