Isso é exatamente para o qual trap ERR
é. Infelizmente, tem as mesmas limitações e desvantagens de set -e
. Como set -e
, qualquer comando que retorne um valor diferente de zero em uma expressão condicional irá disparar o trap. Aqui está um código de exemplo:
error=0
set_error() {
(( error++ ))
}
trap set_error ERR
ls askdjasdaj 2>/dev/null
false
false || true # false returns non-zero but is not counted due to the conditional
echo "$error" # outputs "2"