Restaurar una opción al final de una función en zsh

Restaurar una opción al final de una función en zsh

Estoy escribiendo una función de shell zsh (a diferencia de un script) donde realmente me gustaría que extended_globesté habilitada la opción. Pero como la función se ejecuta en el contexto de la persona que llama, no quiero alterar su configuración.

Lo que me gustaría hacer está habilitado condicionalmente extended_globsiempre que lo necesite y luego restaurarlo a la opción del usuario. ¿Hay alguna forma de comprobar si una opción está habilitada en zsh?

Respuesta1

Puedes usar ellocal_optionsopciónpara restaurar automáticamente las opciones cuando la función sale. Esto sólo sería apropiado si su función no genera ningúnotrocambios de opción que desea conservar una vez finalizada la función.

Por lo tanto, podrías escribir tu función así:

do_something() {
  setopt local_options extended_glob
}

Si tiene alguna otra opción que desea conservar después de que la función haya regresado, puede usar la optionsmatriz asociativa (de lazsh/parametermódulo) para comprobar y manipular fácilmente opciones individuales:

do_something() {
  local eg=$options[extended_glob]
  setopt extended_glob
  options[extended_glob]=$eg
}

Si este módulo no está disponible en su instalación, puede utilizar el-o prueba:

do_something() {
  local eg=no
  [[ -o extended_glob ]] && eg=
  setopt extended_glob
  setopt ${eg}extended_glob
}

información relacionada