我想提交相同的 .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