Estoy escribiendo una función de shell zsh (a diferencia de un script) donde realmente me gustaría que extended_glob
esté 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_glob
siempre 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_options
opció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 options
matriz asociativa (de lazsh/parameter
mó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
}