Se você inserir algo como o seguinte segmento de código entre seus dois for
loops, isso pode ajudar.
flag=0
while [ flag -eq 0 ]
do
ps -ef | grep "Rscript --vanilla" | grep -v grep > /dev/null
flag=${?}
sleep 10
done
É claro que, se o seu aplicativo Rscript
tiver uma chance de não ser concluído com sucesso e persistente, seu segundo loop for pode não ter a chance de ser executado. Segmento de código acima, todos os processos com o identificador Rscript --vanilla
serão concluídos e desaparecerão corretamente. Sem saber o que seu aplicativo faz e como ele é executado, preciso confiar nessa suposição.
EDITAR
À luz dos comentários, isso atenderia melhor às suas necessidades. (inclui o seu código original, bem como a lógica de verificação de conclusão)
for i in {1..30}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &
pids[$i]=${!}
done
flag=0
while [ flag -eq 0 ]
do
for PID in $(echo ${pids[@]})
do
flag=1
ps -ef | grep ${PID} | grep -v grep >/dev/null; r=${?}
if [ ${r} -eq 0 ]
then
flag=0
fi
done
done
for i in {31..60}
do
## append a & if you want to run it parallel;
nohup Rscript --vanilla main.R 10 100 $i &> logfile"$i" &
done