en cours d'exécution pour la boucle - mais attendez que la chaîne de mots du fichier journal continue

0

jusqu'ici j'ai ceci:

for each in {01..10} ; do ./sb0$each/tomcat_sb0$each start;done

cela va démarrer mes applications à la fois, mais je veux qu'il attende jusqu'à ce qu'il lise une ligne dans un fichier, quel est le moyen le plus simple de le faire?

Anthony
la source

Réponses:

1
while ! grep "the line you're searching for" /path/to/the.file
do sleep 10; done
for each in {01..10} ; do ./sb0$each/tomcat_sb0$each start;done

Cette solution a une whileboucle qui continuera tant que la ligne que vous recherchez ne se trouve pas dans le fichier. La boucle ne contient que sleep10 secondes, de sorte qu'elle vérifie toutes les 10 secondes la ligne souhaitée. De toute évidence, vous pouvez définir ce que vous voulez.

La greprecherche d'un motif dans un fichier donné, et retourne false si rien ne correspond au motif. Le !moyen ne signifie pas, et comme non faux = vrai, la boucle continue tant que la grepcommande retourne faux.

Par exemple, si vous recherchez la ligne de démarrage, les applications doivent maintenant être insérées dans le fichier /var/tmp/foo.txt .

 while ! grep "start the apps now chuck" /var/tmp/foo.txt;

Si la ligne existe, la réponse n'aura pas une longueur égale à zéro. Le conditionnel renverra false et la boucle se terminera.

stib
la source
1
Je suggère d'utiliser 'while! grep "lance les applications maintenant" /var/tmp/foo.txt 'à la place. Moins de pièces en mouvement. (le code de sortie de grep indique si la chaîne a été trouvée)
Slartibartfast