Você tem um erro, pois o loop terminou com done
palavra-chave, não fi
.
for variable in lists
do
# do something here
done
Eu gostaria de enviar o mesmo trabalho .sas iterando sobre um argumento, mas gostaria que o trabalho só fosse enviado depois que o anterior fosse concluído. 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 resulta em todos os trabalhos sendo enviados quase imediatamente, e então eles ficam na fila. Alguém pode elaborar o comando 'wait'? Estou tentando suspender a submissão até que o trabalho anterior do SAS seja concluído , não enviado.
Você tem um erro, pois o loop terminou com done
palavra-chave, não fi
.
for variable in lists
do
# do something here
done
Remova o comando "wait", não há uso para ele. Além disso, remova o "& pid_ind = $!" Esse 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 que o último termine.
#!/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
Tags job-control shell-script