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 -fzuerst 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 +fErweiterung des letzten Dateinamens wird erneut aktiviert und möglicherweise auch deaktiviert.
Wenn beispielsweise die -fDateinamenerweiterung bereits deaktiviert war, als der Wert für $-zum ersten Mal gespeichert wurde, lautet der gespeicherte Wert (mindestens) :
f
Wenn setalso erneut ausgeführt wird, funktioniert Folgendes:
set +f -f
Damit bist du wieder da, wo du angefangen hast.
set +o
Listet alle setOptionen 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 shoptIonen und setTabellenoptionen 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 -fpum auch alle aktuell deklarierten Shell-Funktionen einzuschließen. Sie können alles zusammenfassen und evalwenn Sie fertig sind. Sie können sogar aliasohne Argumente mehr davon aufrufen . Das ... könnte es aber verdecken. Ich denke, es gibt "$@"- die müssten Sie bashzuerst 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 traps 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)
trapVerhä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 trapsin 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 -pund readonly -pwiederherstellen.
Jedenfalls ist das genug.
set +oundshopt? verwenden. (shoptsettableshoptable