UNIX:以前のジョブが完了した後にのみジョブを送信しますか?

UNIX:以前のジョブが完了した後にのみジョブを送信しますか?

同じ.sasジョブの繰り返しパラメータを送信したいのですが、以前のジョブが完了した後にのみジョブを送信したいと思います。私の試みは次のとおりです。

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

これにより、すべてのジョブがほぼ同時に送信され、キューに入れられます。誰でも "wait"コマンドについて詳しく説明できますか?最後のSAS操作が完了するまでコミットを延期しようとしています。十分、提出していない。

答え1

バグがあります。 forループはdone代わりにキーワードで終了しますfi

for variable in lists
do
    # do something here
done

答え2

「wait」コマンドを削除すると、役に立ちません。また、「&pid_ind = $!」このコードを削除すると、タスクがバックグラウンドプロセスに切り替えられ、問題が発生します。

デーモンの外部(およびバックグラウンドで開始されたプロセス)では、スクリプトのコマンドが同期されます。各コマンドは、最後のコマンドが完了するのを待ちます。

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

関連情報