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

관련 정보