我有一个程序可以非常快速地将一批文本写入标准输出,但输出没有我可以为其编写期望循环的特定输出。我的程序的标准输出示例:
[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
如果需要,可以将回显重定向到不同的日志,并且可以修改脚本以回显从标准读取的数据。