n秒間データフローがない場合、パイプラインの終了

n秒間データフローがない場合、パイプラインの終了

しばらくの間、標準出力にデータを生成してから実行し続けますが、もはやデータを出力しないソフトウェアがあります。

その出力を取得し、さらに処理して出力をファイルに保存するパイプラインがあります。ただし、元のプロセスは出力生成が完了した後も実行を続けるため、手動で終了する必要があります。何秒間も出力が生成されない場合、実行中のプログラムを終了するコマンドはありますか?

timeoutコマンドについて知っていますが、固定タイムアウトで実行されているようです。ソフトウェアがどれだけ長く出力を継続するかを決定するための明確な方法はありません。

例:

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

おすすめ記事