in esecuzione per il ciclo - ma attendere che la stringa di parole nel file di registro continui


0

finora ho questo:

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

che avvierà le mie app in una volta, ma voglio che aspetti fino a quando non legge una riga in un file, qual è il modo più semplice per farlo?

Risposte:


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

Questa soluzione ha un whileciclo che continuerà fino a quando la linea che stai cercando non viene trovata nel file. Il loop contiene solo sleep10 secondi, in modo che controllerà ogni dieci secondi la linea desiderata. Ovviamente potresti impostarlo su quello che vuoi.

Le grepricerche per un modello in un dato file e restituisce false se non corrisponde al modello. Il !mezzo che non sia, e non falso = true, il ciclo continua fino a quando i grepcomando restituisce falsi.

Ad esempio, se stai cercando la linea avvia le app ora lanciate nel file /var/tmp/foo.txt sembrerebbe

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

Se la linea esiste, la risposta non avrà lunghezza zero, quindi il condizionale restituirà false e il ciclo uscirà.


1
Suggerirei di usare 'while! grep "avvia le app ora chuck" /var/tmp/foo.txt 'invece. Meno parti in movimento. (il codice di uscita per grep indica se la stringa è stata trovata)
Slartibartfast
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.