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

时间:2019-01-30 22:13:14

标签: bash awk stdout

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

这是脚本:

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

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

但是,如果我运行timecat /dev/ttyACM0 > ~/tmp.log,则什么也不会发生。与tee相同。该文件在那里,但为空。

脚本中的awk是否有些奇怪,我如何修改它以使重定向有效?

1 个答案:

答案 0 :(得分:3)

所需要做的只是刷新命令中的打印内容,用以下内容替换最后一个脚本行:

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