我知道我可以将xtrace
输出重定向到some_file
类似这样的内容:
exec 2 >> some_file
set +x
...但这some_file
不仅发送到xtrace
输出,还发送到最初发送到 的任何其他内容fd 2
,其中包括大多数错误消息和警告,所有这些都与 无关xtrace
。
有没有办法捕捉仅有的输出xtrace
在some_file
?
我应该补充一点,我正在寻找一种方法来做到这一点,该方法将尽可能少地扭曲xtrace
输出本身,以及通过设置收集的计时信息PS4
,例如
zmodload zsh/datetime
export PS4='${(j::)epochtime} %N:%i> '
答案1
可能不是您正在寻找的解决方案,但在过去遇到过类似的情况,我的首选是编写一个 python 解析器来获取跟踪文件,并仅将我关心的数据输出到结果文件中。只要您不关心的“垃圾文本”的模式可以从 xtrace 输出中预测/区分,解析应该非常容易完成。
示例 - 抓取所有提交队列中所有 IO 的跟踪,进行 20 分钟的测试,包括在 40GB-70GB 文件中读取和写入结果,但在解析出我关心的数据后,我的结果文件只有 ~1-3GB大小,并且实际上可用于分析和可视化。诚然,对于如此大的文件大小,服务器级系统大约需要 15-30 分钟才能处理完所有内容,但执行相同的过程(单独的场景,相同的想法 - 多个日志,每个日志仅约 24kb) - 我可以获取所有内容在 2 秒内将所有日志中的数据存储到单个可使用文件中。
总而言之,添加一个后处理步骤可能是值得的,这可能会为整体捕获增加几秒/分钟的时间,而不是等待一站式服务。
祝你好运!