running for loop - but wait for string of words in log file to continue

0

so far I have this:

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

that will start my apps at once, but I want it to wait until it reads one line in a file, what's the easiest way to do that?

Anthony

Posted 2014-04-19T12:48:46.393

Reputation: 3

Answers

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

This solution has a while loop that will continue as long as the line you're searching for isn't found in the file. The loop contains just a sleep of 10 seconds, so that it will check every ten seconds for the line you want. Obviously you could set this to whatever you want.

The grep searches for a pattern in a given file, and returns false if nothing matches the pattern. The ! means not, and as not false = true, the loop continues as long as the grep command returns false.

For example, if you're looking for the line start the apps now chuck in file /var/tmp/foo.txt it would look like

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

If the line exists the answer won't have zero length so the conditional will return false and the loop will exit.

stib

Posted 2014-04-19T12:48:46.393

Reputation: 3 320

1I would suggest using 'while ! grep "start the apps now chuck" /var/tmp/foo.txt' instead. Fewer moving parts. (the exit code for grep indicates whether the string was found) – Slartibartfast – 2014-04-20T03:27:04.920