¿Cómo saber si extglob está habilitado en la sesión bash actual?

9

Tengo una terminal de bash abierta. Quiero saber si la opción extglob está habilitada o deshabilitada en esta sesión, antes de cambiar su valor. ¿Cómo puedo hacer esto?

llamar
fuente
2
Tenga en cuenta que no es necesario verificarlo a menos que tenga curiosidad. Si lo desea, simplemente ejecute shopt -s extglobo, si lo desea, ejecute shopt -u extglob. No hace ninguna diferencia si estaba encendido originalmente o no.
terdon

Respuestas:

15

Solo corre:

$ shopt extglob

Devolverá el estado actual:

$ shopt extglob 
extglob         on
$ shopt -u extglob 
$ shopt extglob 
extglob         off

Para mostrar todas las opciones, simplemente ejecute:

$ shopt
Jeff Schaller
fuente
Este también se puede usar para crear secuencias de comandos, su estado de retorno también indica la opción configurada o no, pero el mensaje desordenará el estándar.
Cuonglm
11

Use shopt -q :

shopt -q extglob && echo enable || echo disable

-qla opción hacer shoptdescartar la salida y devolver el estado para indicar que las opciones están configuradas o no.

Tenga en cuenta que shoptsolo informa las opciones que pueden aparecer en BASHOPTSvariable, esas opciones no son válidas para el setcomando incorporado.

Para verificar las opciones que son válidas seto pueden aparecer en SHELLOPTS, use shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
Cuonglm
fuente
2
¿Por qué no solo shopt extglob?
terdon
1
Porque no quiero que la salida
altere
¿Qué quieres decir? Por lo que puedo decir, el OP quiere verificar si la opción está configurada o no. Mencionan que esto está en una terminal, así que dudo que sea parte de un script. Y, de todos modos, ¿cuál es la diferencia? Ambos shopt extgloby su enfoque escribirán en stdout. ¿Está pensando shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon
@terdon: Bueno, mi enfoque solo escribo en stdout si quiero . El enfoque general es shopt -q extglob && : Code when enable || : Code when disable.
Cuonglm
3
Me imagino escribiendo un script que intentaría preservar la configuración existente del usuario, pero podría tener un código crítico que se romperá si no se configura de una manera particular. Esto sugiere un método para determinar silenciosamente el estado actual, guardarlo y restaurarlo lo antes posible después de realizar las operaciones cruciales que requieren un estado potencialmente diferente.
Monty Harder
5

Hay dos listas de opciones en bash. Uno para shopty otro para set.

La opción extglobpertenece a la shoptlista.
Su valor puede imprimirse utilizando shopt extglobo shopt -p extglob.

Una opción como nounsetpertenece a la setlista.
Su valor puede imprimirse usando shopt -op nounseto shopt -o nounset.

Marque una opción.

Para imprimir una opción específica (sin cambiarla) para shopt, use shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

Y para set, use: shopt -po name(sí, puede usar shopt -oppara la setlista).

$  shopt -po xtrace
set +o xtrace

Lista de opciones.

Para enumerar todas las opciones de shopt, use shopt(o reutilizable shopt -p).
También shopt -so shopt -upodría ser utilizado.

La forma de enumerar todas las opciones setes con set -o(relacionado:) set +o.
O: shopt -oes equivalente a set -oy shopt -opes a set +o.

Manual

De LESS=+/'^ *shopt \[' man bash:

Sin opciones, o con la opción -p, se muestra una lista de todas las opciones configurables. Si se utiliza -s o -u sin argumentos de nombre de opción, la visualización se limita a aquellas opciones que están configuradas o no, respectivamente.

De LESS=+/'^ *set \[' man bash:

Si -o se proporciona sin nombre de opción, se imprimen los valores de las opciones actuales. Si + o se suministra sin nombre de opción, en la salida estándar se muestra una serie de comandos establecidos para recrear la configuración de opciones actual.

Ejemplos

$ 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

Y

$  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

Vale la pena mencionar acerca de shopt -opcuál realmente enumera las setopciones:

$ 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

fuente