Jika program Anda akan berhenti di SIGPIPE (yang merupakan tindakan default), itu harus cukup untuk menyalurkan keluaran ke pembaca yang akan keluar saat membaca baris itu.
Jadi mungkin sesederhana
$ program | sed -e '/Suitable text from the line/q'
Jika Anda ingin menekan penggunaan output default
$ program | sed -n -e '/Suitable text from the line/q'
Demikian juga jika seseorang ingin berhenti setelah sejumlah baris tertentu, ia dapat menggunakan head sebagai pengganti sed, mis.
$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER
Waktu yang tepat saat pembunuhan terjadi tidak tergantung pada perilaku buffering terminal seperti yang disarankan stardt di komentar.
Skrip pembungkus seperti ini adalah pendekatan standar. Skrip menjalankan program di latar belakang dan kemudian berulang, memeriksa file log setiap menit untuk beberapa string. Jika string ditemukan maka program latar belakang dimatikan dan skrip berhenti.
command="prog -foo -whatever"
log="prog.log"
match="this is the what i want to match"
$command > "$log" 2>&1 &
pid=$!
while sleep 60
do
if fgrep --quiet "$match" "$log"
then
kill $pid
exit 0
fi
done
Sebagai alternatif dari jawaban dmckee, grep
perintah dengan -m
opsi (lihat misalnya halaman manual ini) perintah juga dapat digunakan:
compbio | grep -m 1 "Text to match"
untuk berhenti ketika 1 baris yang cocok dengan teks ditemukan atau
compbio | grep -v -m 10 "Text to match"
untuk menunggu 10 baris yang tidak cocok dengan teks yang diberikan.