如果 n 秒內沒有資料流,則終止管道

如果 n 秒內沒有資料流,則終止管道

我有一個軟體,可以在標準輸出上產生資料一段時間,然後繼續運行,但不再輸出任何資料。

我有一個管道,可以獲取該輸出並進一步處理它,將輸出保存在文件中。但是,由於原始進程在完成生成輸出後繼續運行,因此我必須手動終止它。是否有一個命令會在運行的程式在幾秒鐘內沒有產生任何輸出時終止它?

我知道超時命令,但看起來它是在固定超時下運行的。我沒有可靠的方法來確定軟體將保持輸出多長時間。

例子:

假設我的generate-data內容看起來像這樣並且無法修改。事實上,這是一個我不想修改的編譯軟體。

#! /usr/bin/env bash

for x in {1..5}; do
    echo $x
    sleep 1
done

while true; do sleep 1; done

我目前運行類似的東西./generate_data | grep '[2-4]' > output,它會產生我想要的輸出,但永遠不會終止。

我想終止管道一次,generate_data2 秒內不輸出任何內容。

答案1

使用讀取命令。 -t 開關是你的朋友。類似這個

(echo "we:re:e";sleep 2;echo "d:dd:d") | while read -d ":" -t 2 a;do echo $a;done

輸出:

 we
 re
(echo "we:re:e";sleep 1;echo "d:dd:d") | while read -d ":" -t 2 a;do echo $a;done

輸出:

we
re
e d
dd

相關內容