setup.sh: avoid subshells: type -t in _callImplicitHook

This commit is contained in:
Albert Safin 2019-09-19 15:06:48 +00:00
parent d53920a5be
commit cf4e4820f6
1 changed files with 12 additions and 15 deletions

View File

@ -73,21 +73,18 @@ _callImplicitHook() {
set -u set -u
local def="$1" local def="$1"
local hookName="$2" local hookName="$2"
case "$(type -t "$hookName")" in if declare -F "$hookName" > /dev/null; then
(function|alias|builtin) set +u
set +u "$hookName"
"$hookName";; elif type -p "$hookName" > /dev/null; then
(file) set +u
set +u source "$hookName"
source "$hookName";; elif [ -n "${!hookName:-}" ]; then
(keyword) :;; set +u
(*) if [ -z "${!hookName:-}" ]; then eval "${!hookName}"
return "$def"; else
else return "$def"
set +u fi
eval "${!hookName}"
fi;;
esac
# `_eval` expects hook to need nounset disable and leave it # `_eval` expects hook to need nounset disable and leave it
# disabled anyways, so Ok to to delegate. The alternative of a # disabled anyways, so Ok to to delegate. The alternative of a
# return trap is no good because it would affect nested returns. # return trap is no good because it would affect nested returns.