引数を反復する同じ .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