
У меня есть основной скрипт bash, который выполняет несколько скриптов bash поменьше (и каждый скрипт поменьше запускает контейнер docker), но я хочу, чтобы второй скрипт запускался только после того, как первый завершит выполнение и т. д. То есть я хочу, чтобы процессы каждого скрипта НЕ запускались одновременно. Пример:
1st_script.sh param1 param2 param3
2nd_script.sh param1 param2
Предложения в Интернете не работают для меня. Я попытался получить PID 1st_script с помощью:
1st_Script & echo $!
затем использовать ps -p <PID> || <2nd_script>
Но хотя <1st_Script> & echo $!
дает PID, когда я проверяю, есть ли там процесс, ps -p <PID>
там ничего нет. Я знаю, что 1st_script запущен, потому что контейнер docker, который он запускает, указан в списке docker ps
. Так что его процесс также должен быть указан в спискеps -p <PID>
1st_Script && 2nd_Script && 3rd_Script && ...
это не вариант, потому что у меня много скриптов и они не читаются
решение1
Продолжение строк может значительно улучшить читабельность:
script1 && script2 && script3 && scriptn
против
script1 \
&& script2 \
&& script3 \
&& scriptn
Но у меня возникли проблемы с воспроизведением вашей проблемы. Что дает вам впечатление, что ваши сценариинетпоследовательно?
Я сделал два тестовых сценария, каждый из которых содержал
echo hello
sleep 15s
а затем сценарий, который содержал только
./script1
./script2
и измерил время ожидания time
, чтобы получить следующий вывод
hello
hello
real 0m30.003s
user 0m0.002s
sys 0m0.001s
Если бы скрипты выполнялись одновременно, общее время выполнения составило бы менее 30 секунд.
Ваша проблема в том, что вы хотитеконтейнеростановить выполнение перед переходом к следующему сценарию?