Gostaria de enviar o mesmo trabalho .sas iterando sobre um argumento, mas gostaria que o trabalho só fosse enviado após a conclusão do anterior. Aqui está minha tentativa:
#!/bin/ksh
export weeks="1 2 3"
for week in $weeks
do
sas -log job$week.log job.sas > /dev/null & pid_ind=$!
wait $pid_ind
echo "job complete for week $week"
done
Isso faz com que todos os trabalhos sejam enviados quase de uma vez e depois fiquem na fila. Alguém pode elaborar o comando 'wait'? Estou tentando adiar o envio até que o trabalho SAS anterior seja concluído.concluído, não submetido.
Responder1
Você cometeu um erro, o loop for terminou com done
palavra-chave, não fi
.
for variable in lists
do
# do something here
done
Responder2
Remova o comando "wait", não adianta. Além disso, remova o "& pid_ind=$!" Este código coloca o trabalho em um processo em segundo plano que causa o problema que você está enfrentando.
Fora dos processos daemon (e processos iniciados em segundo plano), os comandos dentro de um script são síncronos. Cada comando espera o último terminar.
#!/bin/ksh
weeks="3 4 5"
echo "Waiting for first job to complete..."
for week in $weeks; do
sas -log job$week.log job.sas > /dev/null
echo "job complete for week $week"
done