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

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

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

1 ответ1

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 цикла , которое будет продолжаться до тех пор , как линии , которую вы хотите найти не найден в файле. Цикл содержит всего 10 секунд sleep , так что каждые десять секунд он проверяет нужную вам строку. Очевидно, вы можете установить это на что угодно.

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .