根据标准输出频率运行命令

根据标准输出频率运行命令

我有一个程序可以非常快速地将一批文本写入标准输出,但输出没有我可以为其编写期望循环的特定输出。我的程序的标准输出示例:

[time:here] random text 1
[time:here] random text 2
[time:here] random text 3
[time:here] random text 4
[time:here] random text 5
[time:here] random text 6
[time:here] random text 7

然后它等到我与它交互,然后它再次使用相同样式的文本写入标准输出:

[time:here] random text 8
[time:here] random text 9
[time:here] random text 10
[time:here] random text 11
[time:here] random text 12
[time:here] random text 13
[time:here] random text 14

标准输出的打印速度非常快,就像在几毫秒内一样,然后需要等待,直到我与它交互。一旦我交互,标准输出就会很快再次写入,然后等待。这会重复,直到我关闭程序。

echo在等待之间,我想在我与程序交互的时间(使用或类似的东西)发送一个命令写入另一个文件。

有什么方法可以定位“等待”并echo在每次等待我的标准输出后执行命令吗?例如,如果等待时间超过 5 秒,则运行命令echo,并等待 stdout 再次更改?

答案1

您可以使用带有超时的阻塞读取来确定输出何时停止。例如,Bashread支持超时参数。如果 STDIN 的输出停止超过 2 秒,以下脚本将写入一行:

#!/bin/sh

while read -r firstline; do
    while read -r -t 2 line; do
        continue
    done
    echo "---- No data in 2 seconds ----"
done

如果需要,可以将回显重定向到不同的日志,并且可以修改脚本以回显从标准读取的数据。

相关内容