Come sapere se extglob è abilitato nella sessione bash corrente?


9

Ho un terminale bash aperto. Voglio scoprire se l'opzione extglob è abilitata o disabilitata in questa sessione, prima di modificarne il valore. Come posso fare questo?


2
Nota che non è necessario controllare se non sei curioso. Se lo vuoi acceso, corri shopt -s extglobo, se lo vuoi, corri shopt -u extglob. Non fa alcuna differenza se era originariamente acceso o no.
terdon

Risposte:


15

Corri:

$ shopt extglob

Restituirà lo stato corrente:

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

Per mostrare tutte le opzioni, basta eseguire:

$ shopt

Questo può anche essere usato per lo scripting, il suo stato di ritorno indica anche l'opzione impostata o non impostata, ma il messaggio rovinerà lo standard.
cuonglm

11

Usa shopt -q :

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

-qopzione crea l' shoptoutput di scarto e restituisce lo stato per indicare che le opzioni sono impostate o non impostate.

Nota che shoptriporta solo le opzioni che possono apparire in BASHOPTSvariabili, quelle opzioni non sono valide per il setcomando incorporato.

Per verificare le opzioni valide seto che possono essere visualizzate in SHELLOPTS, utilizzare shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable

2
Perché non solo shopt extglob?
terdon

1
Perché non voglio che l'output
rovini il

Cosa intendi? Per quanto ne so, l'OP vuole verificare se l'opzione è impostata o meno. Dicono che questo è in un terminale, quindi dubito che faccia parte di una sceneggiatura. E, comunque, qual è la differenza? Entrambi shopt extglobe il tuo approccio scriveranno su stdout. Stai pensando shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon

@terdon: beh, il mio approccio scrive a stdout solo se lo desidero . L'approccio generale è shopt -q extglob && : Code when enable || : Code when disable.
cuonglm,

3
Posso immaginare di scrivere uno script che tenterebbe di preservare l'impostazione esistente dell'utente, ma potrebbe avere un pezzetto di codice critico che si spezzerebbe se non fosse impostato in un modo particolare. Ciò suggerisce un metodo per determinare silenziosamente lo stato corrente, salvarlo e ripristinarlo APPENA POSSIBILE dopo aver eseguito le operazioni cruciali che richiedono uno stato potenzialmente diverso.
Monty Harder,

5

Ci sono due elenchi di opzioni in bash. Uno per shopte uno per set.

L'opzione extglobappartiene shoptall'elenco.
Il suo valore può essere stampato usando shopt extglobo shopt -p extglob.

Un'opzione come nounsetappartiene setall'elenco.
Il suo valore può essere stampato usando shopt -op nounseto shopt -o nounset.

Seleziona un'opzione.

Per stampare un'opzione specifica (senza modificarla) per shopt, utilizzare shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

E per set, utilizzare: shopt -po name(sì, è possibile utilizzare shopt -opper l' setelenco).

$  shopt -po xtrace
set +o xtrace

Elenco opzioni.

Per elencare tutte le opzioni di shopt, utilizzare shopt(o riutilizzabile shopt -p).
Inoltre shopt -so shopt -upotrebbe essere utilizzato.

Il modo per elencare tutte le opzioni setè con set -o(relativo:) set +o.
Oppure: shopt -oequivale a set -oed shopt -opè set +o.

Manuale

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

Senza opzioni o con l'opzione -p, viene visualizzato un elenco di tutte le opzioni impostabili. Se -s o -u viene utilizzato senza argomenti optname, la visualizzazione è limitata a quelle opzioni impostate o non impostate, rispettivamente.

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

Se -o viene fornito senza nome-opzione, vengono stampati i valori delle opzioni correnti. Se + o viene fornito senza nome-opzione, sull'output standard viene visualizzata una serie di comandi impostati per ricreare le impostazioni delle opzioni correnti.

Esempi

$ 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

E

$  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 menzionare shopt -opquale effettivamente elenca le setopzioni:

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.