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