bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

updating shopt compat settings to include current version


From: Mike Frysinger
Subject: updating shopt compat settings to include current version
Date: Thu, 15 Oct 2015 13:34:33 -0400

with bash-4.0, new compat options were introduced:
        shopt -s compat32
and with bash-4.3, a variable was added:
        export BASH_COMPAT=3.2

but things get a little weird when you want to set the compat level to
the current version:
        $ echo $BASH_VERSION
        4.3.42(1)-release
        $ shopt -s compat43
        bash: shopt: compat43: invalid shell option name
        $ export BASH_COMPAT=4.3
        <no error as DEFAULT_COMPAT_LEVEL is 43>

we're interested in this in Gentoo because we want to set the current
shell compat level to a min version even if that version is the active
one.  ideally it'd be:
        if ! shopt -s compat43 ; then
                echo "error: >=bash-4.3 required, but ${BASH_VERSION} found" >&2
                exit 1
        fi

instead we have to probe the active version ourselves:
        if ! shopt -s compat43 ; then
                if [[ ${BASH_VERSINFO[0]} -ne "4" || ${BASH_VERSINFO[1]} -ne 
"3" ]] ; then
                        echo ...
                        exit 1
                fi
        fi

the BASH_COMPAT variable isn't as useful:
 - possible to accidentally export and impact other shell scripts
 - doesn't fail for <bash-4.3 versions
 - when set to a bad value, $? is set to 0
 - need to capture & test stderr
which means you end up with:
        if ([[ -n $( (BASH_COMPAT=4.3) 2>&1 ) ]] ||
            [[ ${BASH_VERSINFO[0]} -lt 4 ]] ||
            [[ ${BASH_VERSINFO[0]} -eq 4 && ${BASH_VERSINFO[1]} -lt 3 ]]) ; then
                echo ...
                exit 1
        fi
        BASH_COMPAT=4.3

so my request is simple: can we have compatXY added for the current version ?
so in the upcoming bash-4.4 release, get a compat44 option added.
-mike

Attachment: signature.asc
Description: Digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]