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

関連情報