Рейтинг:0

Как запустить несколько сценариев оболочки, но завершить их все, если один из них сталкивается с ошибкой / не завершается успешно?

флаг jp

У меня есть сценарий оболочки, который запускает несколько других сценариев оболочки параллельно, например. ./run_all.sh содержит

./run1.sh &
./run2.sh &
./run3.sh &

ждать
echo "Все 3 завершены"

Как я могу завершить все процессы, если один из них завершается из-за ошибки и т. д.? && требует успешного завершения каждого сценария, но выполняется последовательно.

FedKad avatar
флаг cn
Вы пробовали команду `wait -n`? См.: https://linuxize.com/post/bash-wait/
Рейтинг:0
флаг in

Вы можете попробовать что-то вроде этого:

  { run1.sh || killtheothers.sh 1 ; } &
  { run2.sh || killtheothers.sh 2 ; } &
  { run3.sh || killtheothers.sh 3 ; } &

чтобы каждая команда выполнялась в фоновом режиме (через &), но если какая-либо команда не удалась (возвращает ошибку, т.е. ненулевой статус), то оператор управления "или" || позволяет запускать скрипт killtheothers.sh. Вам придется написать killtheothers.sh, возможно, с помощью команды killall. Я показал это, используя параметр, чтобы указать, какую команду runX скрипту не нужно будет убивать.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.