Ich möchte denselben .sas-Job übermitteln, der über ein Argument iteriert, aber ich möchte, dass der Job erst übermittelt wird, nachdem der vorherige abgeschlossen ist. Hier ist mein Versuch:
#!/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
Dies führt dazu, dass alle Jobs fast gleichzeitig übermittelt werden und dann in der Warteschlange stehen. Kann jemand den Befehl „wait“ näher erläutern? Ich versuche, die Übermittlung zu verzögern, bis der vorherige SAS-Job abgeschlossen ist.vollendet, nicht eingereicht.
Antwort1
Es liegt ein Fehler vor, die For-Schleife wurde mit done
dem Schlüsselwort beendet, nicht mit fi
.
for variable in lists
do
# do something here
done
Antwort2
Entfernen Sie den Befehl „wait“, er ist nutzlos. Entfernen Sie auch „& pid_ind=$!“. Dieser Code versetzt den Job in einen Hintergrundprozess, der das Problem verursacht, das Sie haben.
Außerhalb von Daemon-Prozessen (und im Hintergrund gestarteten Prozessen) sind Befehle innerhalb eines Skripts synchron. Jeder Befehl wartet, bis der letzte beendet ist.
#!/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