我想提交相同的 .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
這導致所有作業幾乎同時提交,然後它們位於佇列中。誰能詳細說明「等待」命令嗎?我試圖推遲提交,直到上一份 SAS 工作完成完全的, 沒有提交。
答案1
你有一個錯誤, for 迴圈以done
關鍵字終止,而不是fi
。
for variable in lists
do
# do something here
done
答案2
刪除“等待”命令,它沒有任何用處。另外,刪除“&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