Pokud se váš program ukončí na SIGPIPE (což je výchozí akce), mělo by stačit nasměrovat výstup do čtečky, která se po přečtení tohoto řádku ukončí.
Takže to může být tak jednoduché jako
$ program | sed -e '/Suitable text from the line/q'
Pokud chcete potlačit výchozí výstup použijte
$ program | sed -n -e '/Suitable text from the line/q'
Podobně, pokud někdo chce zastavit po určitém počtu řádků, mohl by místo sed použít hlavu, např.
$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER
Přesný čas, kdy k zabití dojde, platí závisí na chování terminálu při ukládání do vyrovnávací paměti, jak navrhuje stardt v komentářích.
Obalový skript, jako je tento, je standardní přístup. Skript spustí program na pozadí a poté se zacyklí a každou minutu kontroluje, zda v souboru protokolu není nějaký řetězec. Pokud je řetězec nalezen, program na pozadí je ukončen a skript se ukončí.
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
Jako alternativa k odpovědi dmckee grep
příkaz s -m
Příkaz option (viz např. tato manuálová stránka) lze také použít:
compbio | grep -m 1 "Text to match"
zastavit, když je nalezen 1 řádek odpovídající textu nebo
compbio | grep -v -m 10 "Text to match"
čekat na 10 řádků, které neodpovídají danému textu.