Em set -e
, a inexistência de failfailfail
faz com que todo o script saia (ou o subshell, se a função for executada em um subshell).
Se você não precisa modificar o estado do shell da função, você pode executá-lo em um subshell.
myfunc() (
set -e
ls
failfailfail
uptime
)
Outra abordagem no bash é definir uma ERR
interceptação para execute return
. Se você quiser torná-lo uma configuração local, será necessário restaurar o valor da trap antiga, o que é um pouco complicado.
myfunc() {
local old_ERR_trap=$(trap -p ERR)
if [[ -z $old_ERR_trap ]]; then old_ERR_trap="trap - ERR"; fi
trap 'local ret=$?; eval "$old_ERR_trap"; return $ret' ERR
ls
failfailfail
uptime
}