bash-ловушка с необязательными и необязательными командами после ошибки

#bash #bash-trap

#bash #bash-ловушка

Вопрос:

Я изо всех сил пытаюсь понять, как правильно использовать trap команду bash.

У меня есть сценарий, в котором я хочу

  1. Выполните
  2. Выполните B, что может привести к сбою
  3. Независимо от того, удалось ли B или не удалось, выполните C
  4. Если ошибка 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 и просто вызвать его при выходе, если вы предпочитаете использовать имена функций. 😉