bash - 仅当重定向到管道或文件时 awk 才没有输出

标签 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有什么奇怪的吗?在脚本中,如何修改它以使重定向起作用?

最佳答案

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

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

关于bash - 仅当重定向到管道或文件时 awk 才没有输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58997739/

相关文章:

haskell - 关于Cygwin中Haskell程序的stdout缓冲区的问题

bash - cd 命令在 bash 中看不到该目录

python - Linux结合两个不同的文本文件

linux - 在一个文件中搜索给定模式的另一个文件

bash - 将文件分割成多个子文件

来自 IDLE 的 Python 标准输出重定向

python - process.stdout.readline() 挂起。如何正确使用?

linux - 将字符串放入不带转义字符的 curl 命令

linux - 由 Master bash 脚本定义的库路径,但必须在每个终端 session 中运行它,如何提高效率?

linux - 为什么 bash 脚本中需要 $(( ... )) ?