Woher wissen Sie, ob extglob in der aktuellen Bash-Sitzung aktiviert ist?

9

Ich habe ein Bash-Terminal geöffnet. Ich möchte herausfinden, ob die Option extglob in dieser Sitzung aktiviert oder deaktiviert ist, bevor ich ihren Wert ändere. Wie kann ich das machen?

winko
quelle
2
Beachten Sie, dass Sie nur dann nachsehen müssen, wenn Sie neugierig sind. Wenn Sie es aktivieren möchten, führen Sie es einfach aus shopt -s extgloboder, wenn Sie es deaktivieren möchten, führen Sie es aus shopt -u extglob. Es macht überhaupt keinen Unterschied, ob es ursprünglich eingeschaltet war oder nicht.
Terdon

Antworten:

15

Lauf einfach:

$ shopt extglob

Es wird der aktuelle Status zurückgegeben:

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

Um alle Optionen anzuzeigen, führen Sie einfach Folgendes aus:

$ shopt
Jeff Schaller
quelle
Dieser kann auch für die Skripterstellung verwendet werden. Sein Rückgabestatus zeigt auch an, dass die Option gesetzt oder nicht gesetzt ist, aber die Nachricht wird den Standard durcheinander bringen.
Cuonglm
11

Verwenden Sie shopt -q :

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

-qMit dieser Option können Sie die shoptAusgabe verwerfen und den Status zurückgeben, um anzuzeigen, dass die Optionen aktiviert oder deaktiviert sind.

Beachten Sie, dass shoptnur Optionen gemeldet BASHOPTSwerden, die in Variablen setangezeigt werden können. Diese Optionen sind für den integrierten Befehl nicht gültig .

Verwenden Sie Folgendes, um nach Optionen zu suchen, die für Folgendes gültig setsind oder darin angezeigt werden können :SHELLOPTSshopt -qo

$ bash --posix -c 'shopt -qo posix && echo enable || echo disable'
enable
cuonglm
quelle
2
Warum nicht einfach shopt extglob?
Terdon
1
Weil ich nicht möchte, dass die Ausgabe meinen Standard
durcheinander bringt
Was meinst du? Soweit ich das beurteilen kann, möchte das OP prüfen, ob die Option gesetzt ist oder nicht. Sie erwähnen, dass sich dies in einem Terminal befindet, daher bezweifle ich, dass es Teil eines Skripts ist. Und was ist überhaupt der Unterschied? Beide shopt extglobund Ihr Ansatz schreiben an stdout. Denken Sie an shopt -q extglob && shopt -u extglob || shopt -s extglob?
Terdon
@terdon: Nun, mein Ansatz schreibt nur an stdout, wenn ich will . Der allgemeine Ansatz ist shopt -q extglob && : Code when enable || : Code when disable.
Cuonglm
3
Ich kann mir vorstellen, ein Skript zu schreiben, das versucht, die vorhandene Einstellung des Benutzers beizubehalten, aber möglicherweise einen kritischen Code enthält, der beschädigt wird, wenn er nicht auf eine bestimmte Weise festgelegt wird. Dies schlägt eine Methode vor, um den aktuellen Status stillschweigend zu ermitteln, zu speichern und so schnell wie möglich wiederherzustellen, nachdem die entscheidenden Vorgänge ausgeführt wurden, für die möglicherweise ein anderer Status erforderlich ist.
Monty Harder
5

Es gibt zwei Listen mit Optionen in Bash. Eins für shoptund eins für set.

Die Option extglobgehört zur shoptListe.
Sein Wert kann entweder mit shopt extgloboder gedruckt werden shopt -p extglob.

Eine Option wie nounsetgehört zur setListe.
Sein Wert kann mit shopt -op nounsetoder gedruckt werden shopt -o nounset.

Aktivieren Sie eine Option.

Verwenden Sie Folgendes, um eine bestimmte Option (ohne sie zu ändern) für shopt zu drucken shopt -p name:

$ shopt -p xpg_echo
shopt -u xpg_echo

Und für set, verwenden Sie: shopt -po name(ja, Sie können shopt -opfür setListe verwenden).

$  shopt -po xtrace
set +o xtrace

Optionen auflisten.

Verwenden Sie shopt(oder wiederverwendbar shopt -p) , um alle Optionen von shopt aufzulisten .
Auch shopt -soder shopt -ukönnte verwendet werden.

Die Möglichkeit, alle Optionen aufzulisten, setist mit set -o(verwandt :) set +o.
Oder: shopt -oist gleichbedeutend mit set -ound shopt -opist zu set +o.

Handbuch

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

Ohne Optionen oder mit der Option -p wird eine Liste aller einstellbaren Optionen angezeigt. Wenn entweder -s oder -u ohne optname-Argumente verwendet wird, ist die Anzeige auf die Optionen beschränkt, die festgelegt bzw. nicht festgelegt sind.

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

Wenn -o ohne Optionsnamen angegeben wird, werden die Werte der aktuellen Optionen gedruckt. Wenn + o ohne Optionsnamen angegeben wird, wird in der Standardausgabe eine Reihe von Set-Befehlen zum Wiederherstellen der aktuellen Optionseinstellungen angezeigt.

Beispiele

$ 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

Und

$  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

Es ist erwähnenswert, shopt -opwelche setOptionen tatsächlich aufgelistet sind :

$ 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

quelle