Comment savoir si extglob est activé dans la session bash actuelle?

9

J'ai un terminal bash ouvert. Je veux savoir si l'option extglob est activée ou désactivée dans cette session, avant de modifier sa valeur. Comment puis-je faire ceci?

Becko
la source
2
Notez qu'il n'est pas nécessaire de vérifier, sauf si vous êtes curieux. Si vous le souhaitez, lancez-le shopt -s extglobou, si vous le souhaitez, exécutez-le shopt -u extglob. Cela ne fait aucune différence que ce soit à l'origine ou non.
terdon

Réponses:

15

Exécutez simplement:

$ shopt extglob

Il renverra l'état actuel:

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

Pour afficher toutes les options, lancez simplement:

$ shopt
Jeff Schaller
la source
Celui-ci peut également être utilisé pour les scripts, son état de retour indique également l'option définie ou non définie, mais le message gâchera la norme.
cuonglm
11

Utilisez shopt -q :

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

-qoption shoptannule la sortie et renvoie l'état pour indiquer que les options sont définies ou désactivées.

Notez que shoptseules les options de rapports qui peuvent apparaître en BASHOPTSvariable, ces options ne sont pas valides pour la setcommande intégrée.

Pour vérifier les options valides setou pouvant apparaître dans SHELLOPTS, utilisez shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
cuonglm
la source
2
Pourquoi pas juste shopt extglob?
terdon
1
Parce que je ne veux pas que la sortie
gâche
Que voulez-vous dire? Autant que je sache, l'OP veut vérifier si l'option est définie ou non. Ils mentionnent que c'est dans un terminal, donc je doute que cela fasse partie d'un script. Et de toute façon, quelle est la différence? Les deux shopt extglobet votre approche écriront sur stdout. Pensez-vous shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon
@terdon: Eh bien, mon approche n'écrit à stdout que si je veux . L'approche générale est shopt -q extglob && : Code when enable || : Code when disable.
cuonglm
3
Je peux imaginer écrire un script qui tenterait de préserver le paramètre existant de l'utilisateur, mais pourrait avoir un bit de code critique qui se briserait s'il n'était pas défini d'une manière particulière. Cela suggère une méthode pour déterminer silencieusement l'état actuel, l'enregistrer et le restaurer dès que possible après avoir effectué les opérations cruciales qui nécessitent un état potentiellement différent.
Monty Harder
5

Il y a deux listes d'options dans bash. Un pour shoptet un pour set.

L'option extglobappartient à la shoptliste.
Sa valeur peut être imprimée en utilisant soit shopt extglobou shopt -p extglob.

Une option comme nounsetappartient à la setliste.
Sa valeur peut être imprimée en utilisant shopt -op nounsetou shopt -o nounset.

Cochez une option.

Pour imprimer une option spécifique (sans la modifier) ​​pour shopt, utilisez shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

Et pour set, utilisez: shopt -po name(oui, vous pouvez utiliser shopt -oppour la setliste).

$  shopt -po xtrace
set +o xtrace

Liste des options.

Pour lister toutes les options de shopt, utilisez shopt(ou réutilisables shopt -p).
Aussi shopt -sou shopt -upourrait être utilisé.

La manière de lister toutes les options setest avec set -o(lié:) set +o.
Ou: shopt -oest équivalent à set -oet shopt -opest à set +o.

Manuel

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

Sans aucune option ou avec l'option -p, une liste de toutes les options configurables s'affiche. Si -s ou -u est utilisé sans argument optname, l'affichage est limité aux options définies ou non, respectivement.

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

Si -o est fourni sans nom d'option, les valeurs des options actuelles sont imprimées. Si + o est fourni sans nom d'option, une série de commandes set pour recréer les paramètres d'option actuels s'affiche sur la sortie standard.

Exemples

$ 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

Et

$  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

Il convient de mentionner la shopt -opliste des setoptions:

$ 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

la source