UNIX: Auftrag erst übermitteln, nachdem der vorherige Auftrag abgeschlossen ist?

UNIX: Auftrag erst übermitteln, nachdem der vorherige Auftrag abgeschlossen ist?

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

verwandte Informationen