Você tem os sinalizadores atualmente definidos na variável $-
, para que você possa preservar essa
no início da função e restaure depois.
save=$-
...
if [[ $save =~ e ]]
then set -e
else set +e
fi
Se uma função shell precisar de uma configuração específica de -e / + e para funcionar, é possível definir essa configuração localmente e, em seguida, restaurá-la para sua configuração anterior antes de sair da função?
myfunction()
{
# Query here if -e is set and remember in a variable?
# Or push the settings to then pop at the end of the function?
set +e
dosomething
doanotherthing
# Restore -e/+e as appropriate, don't just do unconditional set -e
}
Você pode ler o valor do sinalizador através da variável SHELLOPTS:
> set +e
> echo $SHELLOPTS
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
> set -e
> echo $SHELLOPTS
braceexpand:emacs:errexit:hashall:histexpand:history:interactive-comments:monitor
Você verá que, depois de definir set -e
, o valor errexit
em $SHELLOPTS
será exibido. Você pode verificar a partir daí.
No entanto, você pode contornar isso (se desejar!) lembrando-se do seguinte ponto: de acordo com o Manual :
-e:
..... This option applies to the shell environment and each subshell environment separately.
Assim, se você executar sua função em um subshell, como
zz="$(myfunction)"
você não precisa se preocupar se a variável errexit
está definida ou não no ambiente de chamada e pode configurá-la como desejar.
Tags bash shell-script