Use 'shopt -p -o' to obtain the current set of 'set' flags, and to
restore them on popping. Unlike $-, it is output in command form (alike
'shopt -p'), removing the need for separate logic in eshopts_pop.
---
 eclass/estack.eclass | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/eclass/estack.eclass b/eclass/estack.eclass
index 19c388f3d8d2..f548abf8c283 100644
--- a/eclass/estack.eclass
+++ b/eclass/estack.eclass
@@ -158,7 +158,7 @@ eshopts_push() {
                [[ $# -eq 0 ]] && return 0
                shopt "$@" || die "${FUNCNAME}: bad options to shopt: $*"
        else
-               estack_push eshopts $-
+               estack_push eshopts "$(shopt -p -o)"
                [[ $# -eq 0 ]] && return 0
                set "$@" || die "${FUNCNAME}: bad options to set: $*"
        fi
@@ -172,12 +172,7 @@ eshopts_push() {
 eshopts_pop() {
        local s
        estack_pop eshopts s || die "${FUNCNAME}: unbalanced push"
-       if [[ ${s} == "shopt -"* ]] ; then
-               eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: 
${s}"
-       else
-               set +$-     || die "${FUNCNAME}: sanity: invalid shell 
settings: $-"
-               set -${s}   || die "${FUNCNAME}: sanity: unable to restore 
saved shell settings: ${s}"
-       fi
+       eval "${s}" || die "${FUNCNAME}: sanity: invalid shopt options: ${s}"
 }
 
 # @FUNCTION: eumask_push
-- 
2.12.1


Reply via email to