Si votre programme se termine sur SIGPIPE (ce qui est l'action par défaut), il devrait suffire de diriger la sortie vers un lecteur qui se fermera à la lecture de cette ligne.
Cela pourrait donc être aussi simple que
$ program | sed -e '/Suitable text from the line/q'
Si vous souhaitez supprimer la sortie par défaut, utilisez
$ program | sed -n -e '/Suitable text from the line/q'
De même, si l'on veut s'arrêter après un certain nombre de lignes, on peut utiliser head à la place de sed, par exemple
$ program | head -n$NUMBER_OF_LINES_TO_STOP_AFTER
L'heure exacte à laquelle la mise à mort se produit fait dépendent du comportement de mise en mémoire tampon du terminal, comme stardt le suggère dans les commentaires.
Un script wrapper comme celui-ci est une approche standard. Le script exécute le programme en arrière-plan, puis boucle, vérifiant le fichier journal toutes les minutes pour une chaîne. Si la chaîne est trouvée, le programme d'arrière-plan est tué et le script se ferme.
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
Comme alternative à la réponse de dmckee, le grep
commande avec le -m
option (voir par exemple cette page de manuel) peut également être utilisée :
compbio | grep -m 1 "Text to match"
pour s'arrêter lorsqu'une ligne correspondant au texte est trouvée ou
compbio | grep -v -m 10 "Text to match"
attendre 10 lignes qui ne correspondent pas au texte donné.