printf %s\\n "$-"
Listet die Optionen für einzelne Buchstaben in einer einzelnen Zeichenfolge auf.
Dieser Parameter kann auch wie folgt verwendet werden:
set -f -- ${-:+"-$-"}
echo *don\'t* *glob* *this*
set +f "$@"
Deaktivieren Sie -f
zuerst die Erweiterung des Shell- Dateinamens, während Sie gleichzeitig einen Wert für $-
- falls vorhanden - in speichern $1
. Als nächstes treten keine Globs auf, und die +f
Erweiterung des letzten Dateinamens wird erneut aktiviert und möglicherweise auch deaktiviert.
Wenn beispielsweise die -f
Dateinamenerweiterung bereits deaktiviert war, als der Wert für $-
zum ersten Mal gespeichert wurde, lautet der gespeicherte Wert (mindestens) :
f
Wenn set
also erneut ausgeführt wird, funktioniert Folgendes:
set +f -f
Damit bist du wieder da, wo du angefangen hast.
set +o
Listet alle set
Optionen der Tabellen-Shell (siehe Jasons Antwort für dieshopt
Optionen "Ist das ein Wort?") In einer Form auf, die für den Wiedereintritt in die Shell sicher ist. Auf diese Weise können Sie auch Folgendes tun:
state=$(set +o)
set -some -crazy -options
eval "$state"
Zum Speichern, Ändern und Wiederherstellen des jeweiligen Status der Shell-Optionen.
So bearbeiten Sie shopt
Ionen und set
Tabellenoptionen auf einmal:
state=$(set +o;shopt)
#do what you want with options here
eval "$state"
Sie können auch set
ohne Argumente aufrufen , um eine Liste aller aktuell eingestellten Variablen der Shell hinzuzufügen - auch für den Wiedereintritt in die Shell in Anführungszeichen gesetzt. Und Sie können - in bash - zusätzlich den Befehl hinzufügen, typeset -fp
um auch alle aktuell deklarierten Shell-Funktionen einzuschließen. Sie können alles zusammenfassen und eval
wenn Sie fertig sind. Sie können sogar alias
ohne Argumente mehr davon aufrufen . Das ... könnte es aber verdecken. Ich denke, es gibt "$@"
- die müssten Sie bash
zuerst in ein Array setzen, nehme ich an, bevor Sie tun set
.
Nein, es gibt auch trap
. Das ist ein bisschen lustig. Meistens:
trap 'echo this is my trap' 0
(echo this is my subshell; trap)
... drucke nur, das ist meine Subshell, weil die Subshell ein neuer Prozess ist und einen eigenen Satz von trap
s bekommt - und deshalb keine erbttrap
s, sondern nur die, die die Eltern explizit ignoriert haben - (wie trap '' INT
) .
Jedoch:
trap 'echo this is my trap' 0
save_traps=$(trap)
trap
Verhält sich besonders dann, wenn es der erste und einzige Befehl ist, der in einer Befehlsersetzungs-Subshell ausgeführt wird, da eine Liste der aktuell festgelegten übergeordneten Shell traps
in einem Format reproduziert wird, das für den sicheren Wiedereintritt in die Shell in Anführungszeichen gesetzt ist. Und so können Sie das tun save_traps
, dann set
ohne Argumente - und der ganze Rest bereits erwähnt - auf so ziemlich eine Sperre für alle Shell - Zustand erhalten. Möglicherweise möchten Sie jedoch die ursprünglichen Shell-Var-Attribute explizit hinzufügen export -p
und readonly -p
wiederherstellen.
Jedenfalls ist das genug.
set +o
undshopt
? verwenden. (shopt
settable
shoptable
shopt
state=$(set +o;shopt -p)
Von der
man
Seite:druckt eine Liste aller aktivierten Optionen.
quelle
set
und eingestellt werden könnenshopt
?set
ist weitaus umfangreicher: siehe Manpage-Eintrag .shopt <option>
huponexit
) ein. einfache Möglichkeit, dies zu beheben, istshopt | grep on$
So listen Sie alle Optionen auf:
So überprüfen Sie eine bestimmte Option:
Nehmen Sie die Option
verbose
als Beispiel:quelle
Optionen ?: In bash gibt es drei Gruppen von Optionen.
Die vom Befehl gelesenen oder gesetzten Optionen
set
.(Verwenden Sie diesen Befehl für die manuelle:
LESS=+/'set \[--abefhkmnptuvxBCEHPT\]' man bash
)Alle Ein-Buchstaben - Optionen:
abefhkmnptuvxBCEHPT
Auch die Optionen (die kein einziges Buchstabenäquivalent haben):
Die vom Befehl gelesenen oder gesetzten Optionen
shopt
.(Lesen Sie das Handbuch mit diesem Befehl:
LESS=+/'shopt \[-pqsu\]' man bash'
)Die Liste ist ziemlich lang , aber einfach, Gebrauch zu drucken:
oder ähnlich (aber nicht gleich):
Die Optionen , die auf INVOCATION eingestellt werden könnte:
(Befehl für die manuelle:
LESS=+/'^INVOCATION' man bash
)Alle
set
Optionen:Alle
shopt
MöglichkeitenEinige Optionen, die nur beim Aufrufen von bash von Bedeutung sind:
Und auch (lange Optionen):
Alle
set
Ein-Buchstaben-Optionen und-ri
werden mit gedruckt$-
.Beispielsweise:
Der Aufruf von bash als Login-Shell wird nur mit shopt gemeldet:
Somit:
Die Option
-n
kann von keinem Code getestet werden, da dies bedeutet, dass kein Code ausgeführt wird.Druckoptionen
Das beste Werkzeug, um die Optionen der laufenden Shell aufzulisten, entweder die mit
set
oder die mit eingestellten,shopt
ist das gleicheshopt
. So listen Sie festgelegte Optionen auf:Welches wirkt genau wie
set -o
. Verwenden Sieshopt -po
, um das gleiche Ergebnis zu erhalten wieset +o
.So listen Sie die Shopt-Optionen auf:
Von denen Sie wählen können, ob Sie die eingestellten
shopt -ps
oder die nicht eingestellten drucken möchtenshopt -pu
Um alle Möglichkeiten zu bekommen. Möglichst viele lange Optionen und einige (
-sDc
) in INVOCATION können nicht gedruckt werden:So speichern Sie sie in einer Variablen:
Und die Variable könnte verwendet werden, um alle Optionen zurückzusetzen:
quelle
So überprüfen Sie eine bestimmte Option:
quelle