Ich schreibe eine ZSH-Shell-Funktion (im Gegensatz zu einem Skript), bei der ich die extended_glob
Option wirklich gerne aktivieren würde. Da die Funktion jedoch im Kontext des Anrufers ausgeführt wird, möchte ich dessen Einstellungen nicht überschreiben.
Ich möchte es bedingt aktivieren, extended_glob
solange ich es brauche, und es dann auf die Option des Benutzers zurücksetzen. Gibt es eine Möglichkeit zu überprüfen, ob eine Option in zsh aktiviert ist?
Antwort1
Du kannst den ... benutzenlocal_options
Möglichkeitum Optionen automatisch wiederherzustellen, wenn die Funktion beendet wird. Dies wäre nur dann sinnvoll, wenn Ihre Funktion keineandereOptionsänderungen, die nach Abschluss der Funktion beibehalten werden sollen.
Sie könnten Ihre Funktion also wie folgt schreiben:
do_something() {
setopt local_options extended_glob
⋮
}
Wenn Sie eine andere Option haben, die Sie beibehalten möchten, nachdem die Funktion zurückgegeben wurde, können Sie das options
assoziative Array verwenden (aus demzsh/parameter
Modul), um einzelne Optionen einfach zu überprüfen und zu bearbeiten:
do_something() {
local eg=$options[extended_glob]
setopt extended_glob
⋮
options[extended_glob]=$eg
}
Wenn dieses Modul in Ihrer Installation nicht verfügbar ist, können Sie das-o
prüfen:
do_something() {
local eg=no
[[ -o extended_glob ]] && eg=
setopt extended_glob
⋮
setopt ${eg}extended_glob
}