Я хотел бы отправить то же самое задание .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