しばらくの間、標準出力にデータを生成してから実行し続けますが、もはやデータを出力しないソフトウェアがあります。
その出力を取得し、さらに処理して出力をファイルに保存するパイプラインがあります。ただし、元のプロセスは出力生成が完了した後も実行を続けるため、手動で終了する必要があります。何秒間も出力が生成されない場合、実行中のプログラムを終了するコマンドはありますか?
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_data
2秒間何も出力しないようにします。
ベストアンサー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