Я использовал простую преамбулу bash, как это, в моих скриптах:
#!/bin/bash
set -e
В сочетании с модулярностью/использованием функций это укусило меня сегодня.
Итак, скажем, у меня есть функция где-то вроде
foo() {
#edit: some error happens that make me want to exit the function and signal that to the caller
return 2
}
В идеале я хотел бы иметь возможность использовать несколько небольших файлов, включать их функции в другие файлы, а затем вызывать эти функции, например
set +e
foo
rc=$?
set -e
. Это работает ровно на два уровня подпрограмм. Но если foo также вызывает такие подпрограммы, последний параметр перед возвратом будет set -e
, который сделает вывод script на возврате - я не могу переопределить это в вызывающей функции. Итак, мне нужно было
foo() {
#calling bar() in a shielded way like above
#..
set +e
return 2
}
Который я нахожу очень противоречивым (а также не тем, что хочу), что, если в некоторых контекстах я хотел бы использовать функцию без защиты от сбоев, а в других контекстах я хочу обработать очистку?) Какой лучший способ справиться с этим? Btw. Я делаю это на OSX, я не тестировал, отличается ли это поведение от Linux.