Приветствую
Я хочу отлавливать ошибки через trap
. Использую следующий код:
function handle_fail() {
local cmd="$BASH_COMMAND" function="${FUNCNAME[1]}" exitcode="$?"
printf 'in %s: command '\''%s'\'' failed with exit-code %s\n' "$function" "$cmd" "$exitcode" >&2
exit 1
}
set -o pipefail
trap handle_fail ERR
Но ошибка не отлавливается, если она допущена в subshell:
echo < <(false) # `false` возвращает 1 в subshell
echo 'DONE' # будет выведено DONE
# Конкретный юзкейс: если find сфейлится, скрипт продолжит работать
readarray -t file_list < <(find -- "$__DIR__/data" -type f -printf '%P\n')
С помощью set -e
сработает, но хочется иметь свою функцию handle_fail()
, которая работала бы в т.ч. с subshell-ами. Возможно ли это?