Bash - Выйти из родительского script из дочернего script

У меня есть Bash parent script, который при неожиданном вводе вызывает журнал регистрации ошибок script, который регистрирует ошибку. Я также хочу, чтобы выполнение остановилось, когда возникла ошибка, и вызывается ошибка script. Но если я вызываю exit из обработки ошибок script, это не останавливает выполнение родительского script. Как я могу приостановить родительский script от ребенка?

Ответ 1

попробовать..

#normal flow
[[ $(check_error_condition ]] && /some/error_reporter.sh || exit 1

так,

  • когда error_reporter выйдет с статусом выходa > 0, родитель тоже закончит
  • если error_reporter выйдет со статусом = 0, родитель продолжит...

Вы не хотите stop the parent from a child (родителям обычно не нравится это поведение):), вместо этого вы хотите tell to parent - need stop, и он остановится (если хотите);)

Ответ 2

Try:

В родительском script:

trap "echo exitting because my child killed me.>&2;exit" SIGUSR1

В дочернем script:

kill -SIGUSR1 `ps --pid $$ -oppid=`; exit

Другой способ:

В дочернем script:

kill -9 `ps --pid $$ -oppid=`; exit

Но это не рекомендуется, потому что родитель должен иметь некоторую информацию о том, чтобы быть убитым, и, при необходимости, выполнить некоторую очистку.


Другой способ: Вместо вызова дочернего script, exec его.


Однако, как указано в другом ответе, самым чистым способом является выход из родителя после возвращения дочернего элемента.

Ответ 3

Не пытайтесь прервать родителя у ребенка. Вместо этого вызовите exit в родительском после возврата дочернего script.

if [ condition ]; then
  /path/to/child.sh
  exit 1
fi

или короче

[ condition ] && { /path/to/child.sh; exit 1; }