UNIX: Enviar trabalho somente após a conclusão do trabalho anterior?

UNIX: Enviar trabalho somente após a conclusão do trabalho anterior?

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 donepalavra-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

informação relacionada