У меня есть Bash parent script, который при неожиданном вводе вызывает журнал регистрации ошибок script, который регистрирует ошибку. Я также хочу, чтобы выполнение остановилось, когда возникла ошибка, и вызывается ошибка script. Но если я вызываю exit
из обработки ошибок script, это не останавливает выполнение родительского script. Как я могу приостановить родительский script от ребенка?
Bash - Выйти из родительского 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; }