特定の時間が経過したら、ラインシェルスクリプトの読み取りを停止する方法は?

特定の時間が経過したら、ラインシェルスクリプトの読み取りを停止する方法は?

私はこのコマンドを実行しています:

tail -f rest.log | while read 
LOGLINE
do
    [[ "${LOGLINE}" == *"Finished building"* ]] && pkill -P $$ tail
done

ファイルに「Build Completed」という文字列が表示されるまで、ログファイルを読み込みます。その場合、tailコマンドは終了します。文字列がまったく表示されない場合もあります。この場合、しばらくしてループを終了したいと思います。若干のタイムアウトが発生しました。 5分後に文字列検索を停止する必要があるとします。この目標をどのように達成できますか?最初のコマンドの前にタイムアウトを試しましたが、うまくいきませんtailでした。

答え1

これを試してみてください:readタイムアウトオプションが組み込まれています-t

while read -t 10 LOGLINE 
do
  [[ "${LOGLINE}" == *"Finished building"* ]] && pkill -P $$ tail
 done

上記の10 seconds。で必要な時間制限を参照してくださいseconds。その他の参考資料man read

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]

答え2

別のオプションは、他のスクリプトでwhileループでtimeoutコマンドを使用することです。

timeout 300 script_that_searches_for_finished_build.sh

スクリプトは5分間実行された後に停止します。

関連情報