UNIX: ¿Enviar el trabajo sólo después de que se complete el trabajo anterior?

UNIX: ¿Enviar el trabajo sólo después de que se complete el trabajo anterior?

Me gustaría enviar el mismo trabajo .sas iterando sobre un argumento, pero me gustaría que el trabajo se envíe solo después de que se complete el anterior. Aquí está mi intento:

    #!/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

Esto da como resultado que todos los trabajos se envíen casi a la vez y luego se queden en la cola. ¿Alguien puede dar más detalles sobre el comando "esperar"? Estoy intentando posponer el envío hasta que se haya finalizado el trabajo SAS anterior.terminado, no presentado.

Respuesta1

Tienes un error, el bucle for terminó con doneuna palabra clave, no fi.

for variable in lists
do
    # do something here
done

Respuesta2

Elimine el comando "esperar", no sirve de nada. Además, elimine el mensaje "& pid_ind=$!" Este código coloca el trabajo en un proceso en segundo plano que causa el problema que está experimentando.

Fuera de los procesos demonio (y los procesos iniciados en segundo plano), los comandos dentro de un script son sincrónicos. Cada comando espera a que finalice el último.

#!/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

información relacionada