bash trap с необязательными и необязательными командами после ошибки - PullRequest
0 голосов
/ 11 апреля 2019

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

У меня есть скрипт, где я хочу

  1. Do A
  2. Do 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 Ответ

1 голос
/ 11 апреля 2019

Ловушки могут использовать произвольные кодовые блоки вместо просто имен функций.

Вы можете сделать вызов функции в ловушке , оценить успех или неудачу и вызвать следующую функцию при необходимости.

trap 'B || D' exit

Вы также можете сделать целое B || D телом E и просто вызвать , что при выходе, если вы предпочитаете использовать имена функций.;)

...