Jeśli funkcja powłoki wymaga określonego ustawienia -e / + e do działania, czy można ustawić to ustawienie lokalnie, a następnie przywrócić poprzednie ustawienie przed wyjściem z funkcji?
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
}
bash
shell-script
usta
źródło
źródło
$-
również działa/bin/sh
i prawdopodobnie nie potrzebujesz bashism, aby go przeanalizować, po prostu użyj np. Globbing, którycase
zapewniaMożesz odczytać wartość flagi poprzez zmienną SHELLOPTS:
Widzisz, po ustawieniu pojawia się
set -e
wartośćerrexit
w$SHELLOPTS
. Możesz to sprawdzić stamtąd.Możesz jednak obejść ten problem (jeśli chcesz!), Pamiętając o następującym punkcie: zgodnie z instrukcją :
Zatem jeśli wykonasz swoją funkcję w podpowłoce, takiej jak
nie musisz się martwić, czy
errexit
zmienna jest ustawiona w środowisku wywołującym, i możesz ustawić ją tak, jak chcesz.źródło
myfunction
wywołania, abymyfunction || true
stłumić efekt -e dla wywołań i nie musiałbym zajmowaćset +e
się funkcjami w pierwszej kolejności.