パイプ消費者の読み取りループを切断する方法

パイプ消費者の読み取りループを切断する方法

このミニスクリプトがあります。

#!/usr/bin/env bash


do_tests(){
  # todo
}


go run . | (
    while read line; do
      if [[ "$line" == "listening" ]]; then
        do_tests  # run this once!
        break;
      fi
    done
)

私が望むのは、一致する行が複数ある場合は、テストを1回以上実行しないようにブール値を反転することです。

これが私が考えることができる唯一の方法です:

go run . | (

    while read line; do
      if [[ "$line" == "listening" ]]; then
        do_tests 
        break;
      fi
    done

    cat # run cat here
)

別の方法がありますか?

関連情報