2015-05-25 3 views
2

Я запускаю сценарий оболочки из java-программы. Сценарий оболочки запустит несколько сканирующих сканеров.Сделать приглашение оболочки ждать завершения всех процессов

#!/bin/bash 
cd /Users/renny/Documents/WorkSpaces/Scrapy/tutorial 

scrapy crawl flipkart -a key="$1" -o "$2"flipkart.xml 
scrapy crawl myntra -a key="$1" -o "$2"myntra.xml 
scrapy crawl jabong -a key="$1" -o "$2"jabong.xml 

Сценарий оболочки не будет ждать завершения сканирующих сканеров. Я хочу, чтобы сценарий оболочки завершался только после завершения подпроцессов. Любая помощь приветствуется.

+1

Параметр 'start' выглядит как Windows,' cmd', не сценарий оболочки. Это верно? – tripleee

ответ

1

Я не уверен, как называется процесс, но предположим, что он называется scrapy, тогда вы можете добиться этого, используя оживленное ожидание.

while [ $(ps | grep scrapy | wc -l) -ge 1 ]; do 
    sleep 1; 
done 
exit 0 

Или же, но то же самое

while [[ -n $(ps | grep scrapy) ]]; do 
    sleep 1; 
done 
exit 0 
+0

Я получаю следующую ошибку ./crawls.sh: строка 15: синтаксическая ошибка около неожиданного токена 'do ' ./crawls.sh: строка 15:' while [$ (ps | grep scrapy | wc -l) ge 1] : «Не могли бы вы помочь мне, потому что я не могу понять, что не так» – Renny

+1

@Renny, обратите внимание, что '[' является ** командой ** в оболочке, а не только синтаксисом. В качестве команды вы должны отделять ее от других слов пробелом. Обратите внимание на ** все ** пробелы в ответе ShellFish. –

+0

Спасибо @glennjackman, который помог. – Renny