Bash

根據標準輸出頻率執行命令

  • July 31, 2017

我有一個程序可以非常快速地在一批文本中寫入標準輸出,但是輸出沒有我可以為其編寫期望循環的特定輸出。我的程序的標準輸出範例:

[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

標準輸出的列印速度非常快,例如在幾毫秒內,然後等待我與之互動。一旦我進行互動,stdout 會很快再次寫入,它會等待。這會重複,直到我關閉程序。

echo在等待之間,我想在我與程序互動的時間(使用或類似的東西)發送一個命令來寫入另一個文件。

有什麼辦法可以定位“等待”並echo在每次等待我的標準輸出後執行命令?例如,如果等待 > 5 秒然後執行echo命令,並等待 stdout 再次更改?

您可以使用帶有超時的阻塞讀取來確定輸出何時停止。例如,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

如果需要,可以將回顯重定向到不同的日誌,並且可以修改腳本以回顯從標準輸入中讀取的數據。

引用自:https://unix.stackexchange.com/questions/382993