1 个不稳定版本
0.1.0 | 2023 年 5 月 12 日 |
---|
#12 in #exit-status
30KB
620 行
iomux
二进制文件将一组子进程的 stdout、stderr 和其他信息多路复用到 stdout。
设计类似于 Unix,旨在为 Unix 工具(grep、
sed 等)提供方便的输出。
示例 - 以可解析的格式聚合 stdout 和 stderr
有时将 stdout 和 stderr 聚合然后解析它们是有用的。
$ iomux find /etc/ | tee find.log
12971> spawned "find" "/etc/"
12971 /etc/
…
12971 /etc/ssl/private
12971! find: ‘/etc/ssl/private’: Permission denied
…
12981 /etc/passwd
12981 /etc/timezone
…
12981> exit 1
上面的输出都在 stdout 上,包括 find
的 stdout 和 stderr,以及关于 find
进程的元数据,例如其参数和退出状态。
每行以 find
的 PID 开头,然后是一个 "tag",表示该行的信息来源
>
关于find
进程的元数据。!
stderr
解析 find.log
我们可以使用标准 Unix 工具解析日志以回答各种查询。我们可以使用标准 Unix 文本处理来重现 stderr 流
确定 find
的 PID
$ grep '^[0-9]*>' find.log | head -1 | sed 's/>.*$//'
12981
重现 stdout
$ grep '^[0-9]* ' ./find.log | sed 's/^[0-9]* //'
/etc/
…
/etc/ssl/private
…
/etc/passwd
/etc/timezone
…
重现 stderr
$ grep '^[0-9]*!' ./find.log | sed 's/^[0-9]*! //'
…
find: ‘/etc/ssl/private’: Permission denied
确定退出状态
$ grep '^[0-9]*> exit' ./find.log | sed 's/^.*exit //'
1
示例 - 记录构建的环境细节
假设您正在自动化一个使用 make
的构建过程,并希望记录大约的启动时间戳、环境、pwd 等。使用 iomux
,您可以像这样聚合这些信息
$ iomux -- date --iso=s -- pwd -- env -- make | tee build.log
build.log
中的输出将子进程的信息以行导向的格式交织在一起,这使得 Unix 风格的文本处理变得方便。
示例 - 合并日志
我喜欢在一个地方看到我的系统日志和我的桌面日志
$ iomux -- journalctl -f -- tail -F ~/.xsession-errors
依赖关系
~5–17MB
~167K SLoC