запустить другой процесс после завершения фонового процесса

сказал, что у меня есть зацикленный скрипт в файле test.sh, я просто хочу запустить скрипт “running_script2.sh” после завершения фонового процесса, что я пытаюсь так, но это не работает

for id in 1 2 3 do bash running_script1.sh $id & (#complete 1 minute/looping) done wait echo "running script2 ..." bash running_script2.sh 

его работа, когда:

 bash running_script1.sh 1 & bash running_script1.sh 2 & bash running_script1.sh 3 & wait echo "running script2 ..." bash running_script2.sh 

но это не эффективно

Там нет семантической разницы между

 for id in 1 2 3 do bash running_script1.sh $id & (#complete 1 minute/looping) done 

а также

 bash running_script1.sh 1 & bash running_script1.sh 2 & bash running_script1.sh 3 & wait echo "running script2 ..." bash running_script2.sh 

Этот демонстрационный скрипт ниже выполняется чуть более 3 секунд (вы можете time его) независимо от того, является ли команда условия true или false :

 #!/bin/sh -eu for i in 1 2 3; do echo "sleep $i" > $i && chmod +x $i done if false; then for i in 1 2 3; do bash ./$i & done else bash ./1 & bash ./2 & bash ./3 & fi wait 

Если вы все еще испытываете расхождения, пожалуйста, напишите в mcve .

Не знаю, правильный ли это подход, но я использовал экран для запуска скрипта
screen – это виртуальный терминал для запуска процесса в bg

 for id in 1 2 3 do screen -d -m bash script1.sh $id done wait echo "running script2 ..." bash script2.sh 

screen -d -m запустит скрипт и закроет экран после его завершения.
Я не могу получить вывод script1 в стандартном выводе при использовании экрана, поэтому я использовал файл для хранения вывода script1.