#bash #bash-trap
#bash #bash-ловушка
Вопрос:
Я изо всех сил пытаюсь понять, как правильно использовать trap
команду bash.
У меня есть сценарий, в котором я хочу
- Выполните
- Выполните B, что может привести к сбою
- Независимо от того, удалось ли B или не удалось, выполните C
- Если ошибка B не удалась, также выполните D
Я думаю, я понял, как сделать 1-3. Это будет выглядеть примерно так;
echo "I am A"
function B {
echo "I am C"
}
trap B EXIT
echo "I am B"
Но куда мне поместить D? Если он попадает внутрь функции B, он выполняется независимо от того, происходит сбой B или нет. Если это снаружи, это происходит только при успешном завершении. Я использую trap
неправильно?
Комментарии:
1.
trap 'B || D' exit
?2. Может быть, это обсуждение на SE поможет?
3. ваш первый комментарий настолько прост, но мне даже в голову не приходило — если вы сможете превратить это в полный ответ, я был бы рад принять
4. Рад, что смог помочь.
Ответ №1:
Ловушки могут использовать произвольные блоки кода вместо просто имен функций.
Вы могли бы выполнить вызов функции в ловушке, оценить успех или неудачу и вызвать следующую функцию, когда потребуется.
trap 'B || D' exit
Вы могли бы также создать все B || D
тело an E
и просто вызвать его при выходе, если вы предпочитаете использовать имена функций. 😉