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 done
una 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