Modifier - Reformulé la question un peu le 7 avril pour la rendre plus claire.SH/BASH - Numérise un fichier journal jusqu'à ce que du texte apparaisse, puis quitte. Comment?
L'environnement de travail actuel est OSX 10.4.11.
Je souhaite analyser un fichier journal pour une phrase donnée. Le fichier journal ne peut PAS être vidé au début du script. Ainsi, le script doit uniquement analyser les modifications apportées au journal.
Mon script actuel:
#!/bin/sh
tail -f log.txt | while read line
do
if echo $line | grep -q 'LOL CANDY'; then
echo 'LOL MATCH FOUND'
exit 0
fi
done
Il fonctionne correctement dans le fait qu'il « LOL MATCH TROUVÉ » immédiatement après avoir trouvé « LOL CANDY », mais il ne quitte effectivement le script jusqu'à ce qu'il ya une autre ajout au journal APRÈS le «LOL CANDY». J'en ai besoin pour cesser immédiatement. Et même si je ne suis pas sûr que ce soit spécifiquement lié, il y a le problème du "tail -f" qui reste ouvert pour toujours. Quelqu'un peut-il s'il vous plaît me donner un exemple qui fonctionnera sans utiliser tail -f?
Si vous voulez, vous pouvez me donner un script bash, car OSX peut gérer sh, bash et d'autres shells je pense.
"il ne devrait plus écrire dans le tube, il pourrait être un problème" Oui, cela semble être le problème alors. Cependant, votre solution "EOF" ne résout pas le problème; le programme se comporte exactement de la même manière. Peut-être parce que l'EOF est en train d'être ajouté à la fin d'une ligne déjà lue? Je voudrais aller de l'avant et résoudre ce problème moi-même, mais je ne sais pas comment faire écho à une nouvelle ligne. – James
Je pense que 'bash' fait un travail légèrement différent de la façon dont Bourne ou Korn l'utilisaient. J'avais une configuration modestement complexe, mais il est apparu que le shell ne recommencerait pas jusqu'à ce que les deux extrémités du pipeline soient sorties - ou peut-être que l'élément principal ('tail -f') soit obligé de sortir. Classiquement, le statut de sortie d'un pipeline est le statut de sortie de la dernière commande, et quand il se termine, le pipeline est terminé. J'ai rencontré d'autres problèmes avec bash (un code qui fonctionnait bien pendant des années sous des obus non bash) dans des domaines faiblement apparentés - et je n'ai pas compris ce qui se passait. Ennuyeux! –