Работает для цикла - но ждать строки слов в файле журнала, чтобы продолжить

Пока у меня есть это:

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

это сразу запустит мои приложения, но я хочу, чтобы оно подождало, пока оно не прочитает одну строку в файле, какой самый простой способ сделать это?

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

Это решение имеет while цикл, который будет продолжаться до тех пор, пока искомая строка не найдена в файле. Цикл содержит только sleep 10 секунд, так что он будет проверять каждые десять секунд на нужную вам линию. Очевидно, вы можете установить это на что угодно.

grep ищет шаблон в заданном файле и возвращает false, если ничто не соответствует шаблону. ! означает не, и как не ложь = истина, цикл продолжается до тех пор, пока grep команда возвращает ложь

Например, если вы ищете строку, запустите приложения, теперь добавьте в файл /var/tmp/foo.txt:

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

Если строка существует, ответ не будет иметь нулевую длину, поэтому условие вернет false и цикл завершится.

Другие вопросы по тегам