Jak się dowiedzieć, czy extglob jest włączony w bieżącej sesji bash?

10

Mam otwarty terminal bashowy. Chcę zmienić, czy opcja extglob jest włączona lub wyłączona w tej sesji, zanim zmienię jej wartość. W jaki sposób mogę to zrobić?

becko
źródło
2
Pamiętaj, że nie musisz sprawdzać, chyba że jesteś ciekawy. Jeśli shopt -s extglobchcesz to włączyć, po prostu uruchom lub, jeśli chcesz to wyłączyć, uruchom shopt -u extglob. Nie ma znaczenia, czy było początkowo, czy nie.
terdon

Odpowiedzi:

16

Po prostu biegnij:

$ shopt extglob

Zwróci bieżący status:

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

Aby wyświetlić wszystkie opcje, wystarczy uruchomić:

$ shopt
Jeff Schaller
źródło
Ten może być również używany do skryptów, jego status powrotu wskazuje również na ustawienie lub wyłączenie opcji, ale wiadomość zepsuje standard.
cuonglm
12

Użyj shopt -q :

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

-qopcja powoduje shoptodrzucenie wyjścia i zwraca status, aby wskazać, że opcje zostały ustawione lub wyłączone.

Zauważ, że shoptzgłasza tylko opcje, które mogą pojawić się w BASHOPTSzmiennej, opcje te nie są prawidłowe dla setwbudowanego polecenia.

Aby sprawdzić opcje, które są ważne setlub mogą się pojawiać SHELLOPTS, użyj shopt -qo:

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
Cuonglm
źródło
2
Dlaczego nie tylko shopt extglob?
terdon
1
Ponieważ nie chcę, aby wyjście
zepsuło
Co masz na myśli? O ile wiem, OP chce sprawdzić, czy opcja jest ustawiona, czy nie. Wspominają, że jest to terminal, więc wątpię, że jest to część skryptu. A poza tym, jaka jest różnica? Zarówno shopt extglobtwoje podejście napisze na standardowe wyjście. Czy myślisz o shopt -q extglob && shopt -u extglob || shopt -s extglob?
terdon
@terdon: Cóż, moje podejście pisze tylko na standardowe wyjście, jeśli chcę . Ogólne podejście brzmi shopt -q extglob && : Code when enable || : Code when disable.
cuonglm
3
Mogę sobie wyobrazić napisanie skryptu, który próbowałby zachować istniejące ustawienia użytkownika, ale może mieć krytyczny fragment kodu, który się zepsuje, jeśli nie zostanie ustawiony konkretny sposób. Sugeruje to metodę cichego określenia bieżącego stanu, zapisania go i przywrócenia go JAK NAJSZYBCIEJ po wykonaniu kluczowych operacji, które wymagają potencjalnie innego stanu.
Monty Harder
6

Istnieją dwie listy opcji w bash. Jeden za shopti jeden za set.

Opcja extglobnależy do shoptlisty.
Jego wartość może być wydrukowane za pomocą jednej shopt extgloblub shopt -p extglob.

Opcja taka nounsetnależy do setlisty.
Jego wartość można wydrukować za pomocą shopt -op nounsetlub shopt -o nounset.

Zaznacz jedną opcję.

Aby wydrukować określoną opcję (bez jej zmiany) dla shopt, użyj shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

I dla set, użyj: shopt -po name(tak, możesz użyć shopt -opdo setlisty).

$  shopt -po xtrace
set +o xtrace

Opcje listy

Aby wyświetlić wszystkie opcje z shopt, użyj shopt(lub wielokrotnego użytku shopt -p).
Również shopt -slub shopt -umoże być użyty.

Sposób wyświetlenia wszystkich opcji setto set -o(związany set +o:).
Lub: shopt -ojest równoważne set -oi shopt -opma set +o.

podręcznik

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

Bez opcji lub z opcją -p wyświetlana jest lista wszystkich ustawialnych opcji. Jeśli użyto opcji -s lub -u bez argumentów nazwy optycznej, wyświetlanie jest ograniczone do tych opcji, które są odpowiednio ustawione lub wyłączone.

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

Jeśli podano -o bez nazwy-opcji, drukowane są wartości bieżących opcji. Jeśli podano + o bez nazwy-opcji, na standardowym wyjściu wyświetlana jest seria poleceń set do odtworzenia bieżących ustawień opcji.

Przykłady

$ 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

I

$  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

Warto wspomnieć o tym, shopt -opktóre faktycznie wyświetla setopcje:

$ 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

źródło