bash - 仅当重定向到管道或文件时,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
的地方,我该如何修改它以使重定向工作?
解决方案
所需要的只是在命令中刷新打印,将最后一个脚本行替换为:
awk '{ print strftime("%Y-%m-%d %H:%M:%S |"), $0; fflush(); }' $tty
^^^^^^^^^
推荐阅读
- sqlite - 如何检索存储在 Sqlite 数据库中的 mobilenos 并存储在列表中
使用 Flutter android 应用程序的变量 - webpack - 除非源代码已更改,否则阻止 webpack 重新构建
- matlab - 如何在matlab中将误差线添加到直方图
- c# - 检查docx文件中是否存在单词
- sql - 计算日期之间差异的最有效方法
- javascript - 谷歌脚本代码在其他工作表中不起作用
- jquery - 将 AJAX 包装在 jQuery 函数中
- vue.js - 得到一个 Nan 但想在 vue 中得到一个 0
- bash - 在 vim 编辑器的选项卡中从文件列表中打开几个文件
- tensorflow - Tensorflow Keras 预处理层