I have a bash terminal open. I want to find out whether the option extglob is enabled or disabled in this session, before I change its value. How can I do this?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Just run:
$ shopt extglob
It will return the current status:
$ shopt extglob extglob on $ shopt -u extglob $ shopt extglob extglob off
To show all options, just run:
$ shopt
Method 2
Use shopt -q:
shopt -q extglob && echo enable || echo disable
-q option make shopt discard output, and return status to indicate that options set or unset.
Note that shopt only reports options which can appear in BASHOPTS variable, those options are not valid to set builtin command.
To check for options which are valid to set, or can be appear in SHELLOPTS, use shopt -qo:
$ bash --posix -c 'shopt -qo posix && echo enable || echo disable' enable
Method 3
There are two lists of options in bash. One for shopt and one for set.
The option extglob belongs to the shopt list.
Its value may be printed by using either shopt extglob or shopt -p extglob.
An option like nounset belongs to the set list.
Its value may be printed by using shopt -op nounset or shopt -o nounset.
Check one option.
To print an specific option (without changing it) for shopt, use shopt -p name:
$ shopt -p xpg_echo shopt -u xpg_echo
And for set, use: shopt -po name (yes, you may use shopt -op for set list).
$ shopt -po xtrace set +o xtrace
List options.
To list all options from shopt, use shopt (or reusable shopt -p).
Also shopt -s or shopt -u could be used.
The way to list all options to set is with set -o (related: set +o).
Or: shopt -o is equivalent to set -o and shopt -op is to set +o.
Manual
From LESS=+/'^ *shopt [' man bash:
With no options, or with the -p option, a list of all settable options is displayed,
If either -s or -u is used with no optname arguments, the display is limited to those options which are set or unset, respectively.
From LESS=+/'^ *set [' man bash:
If -o is supplied with no option-name, the values of the current options are printed. If +o is supplied with no option-name, a series of set commands to recreate the current option settings is displayed on the standard output.
Examples
$ set -o allexport off braceexpand on emacs on errexit off errtrace off functrace off hashall on histexpand on history on ignoreeof off interactive-comments on keyword off monitor on noclobber off noexec off noglob off nolog off notify off nounset off onecmd off physical off pipefail off posix off privileged off verbose off vi off xtrace off
And
$ shopt -sp shopt -s checkwinsize shopt -s cmdhist shopt -s expand_aliases shopt -s extglob shopt -s extquote shopt -s force_fignore shopt -s histappend shopt -s histverify shopt -s interactive_comments shopt -s progcomp shopt -s promptvars shopt -s sourcepath
It is worth mentioning about shopt -op which actually lists set options:
$ shopt -op set +o allexport set -o braceexpand set -o emacs set +o errexit set +o errtrace set +o functrace set -o hashall set -o histexpand set -o history set +o ignoreeof set -o interactive-comments set +o keyword set -o monitor set +o noclobber set +o noexec set +o noglob set +o nolog set +o notify set +o nounset set +o onecmd set +o physical set +o pipefail set +o posix set +o privileged set +o verbose set +o vi set +o xtrace
Method 4
Adding to the answer given above, for set flags,
The current set of flags may be found in $-.
(source: bash help)
if [[ ${-%x*} != $- ]] ; then echo "Debug (xtrace) is on"; fi
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0