Работает для цикла - но ждать строки слов в файле журнала, чтобы продолжить
Пока у меня есть это:
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 и цикл завершится.