首页 > 解决方案 > 仅当重定向到管道或文件时,awk 没有输出

问题描述

我有一个相当简单的脚本(在为每一行添加时间戳后从 tty 打印内容)。它在命令行上输出很好,但重定向输出>不起作用。为什么不?

这是脚本:

#!/bin/bash
awk '{ print strftime("%Y-%m-%d %H:%M:%S |"), $0; }' "$1"

按原样运行它,就像timecat /dev/ttyACM0工作正常一样,我在终端中看到了内容。

但如果我跑timecat /dev/ttyACM0 > ~/tmp.log,什么都不会出来。与 相同tee。文件在那里,但它是空的。

脚本中有什么奇怪awk的地方,我该如何修改它以使重定向工作?

标签: bashawkstdout

解决方案


所需要的只是在命令中刷新打印,将最后一个脚本行替换为:

awk '{ print strftime("%Y-%m-%d %H:%M:%S |"), $0; fflush(); }' $tty
                                                  ^^^^^^^^^

推荐阅读