executando loop - mas aguarde até que a sequência de palavras no arquivo de log continue

0

até agora eu tenho isso:

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

que iniciará meus aplicativos de uma só vez, mas eu quero que ele espere até ler uma linha em um arquivo, qual é a maneira mais fácil de fazer isso?

    
por Anthony 19.04.2014 / 14:48

1 resposta

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

Esta solução tem um loop while que continuará enquanto a linha que você está procurando não for encontrada no arquivo. O loop contém apenas um sleep de 10 segundos, para que ele verifique a cada dez segundos a linha desejada. Obviamente, você pode definir isso como quiser.

O grep procura um padrão em um determinado arquivo e retorna falso se nada corresponder ao padrão. O ! significa não, e como não false = true, o loop continua enquanto o comando grep retornar false.

Por exemplo, se você estiver procurando a linha iniciar os aplicativos agora, chuck no arquivo /var/tmp/foo.txt , pareceria

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

Se a linha existir, a resposta não terá comprimento zero, então a condicional retornará false e o loop sairá.

    
por 19.04.2014 / 16:07