仅当重定向到管道或文件时才从 awk 输出

Gau*_*ier 1 bash awk stdout

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

这是脚本:

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

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

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

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

Gau*_*ier 6

所有这些都需要在命令中刷新打印,用这个替换最后一个脚本行:

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