Restaurando uma opção no final de uma função no zsh

5

Estou escrevendo uma função de shell zsh (em oposição a um script) onde eu realmente gostaria que a opção extended_glob fosse ativada. Mas como a função é executada no contexto do chamador, não quero estragar suas configurações.

O que eu gostaria de fazer é condicionalmente habilitado extended_glob , desde que eu precise e, em seguida, restaurá-lo para a opção do usuário. Existe alguma maneira de verificar se uma opção está habilitada em zsh?

    
por Abhay Buch 01.07.2012 / 03:19

1 resposta

10

Você pode usar a local_options opção para restaurar automaticamente opções quando a função sai. Isso seria apropriado apenas se a sua função não fizer nenhuma outra alteração nas outras que você pretenda persistir após a conclusão da função.

Assim, você poderia escrever sua função assim:

do_something() {
  setopt local_options extended_glob
  ⋮
}

Se você tiver alguma outra opção que deseje persistir após a função ter retornado, poderá usar a matriz associativa options (da zsh/parameter module ) para verificar e manipular facilmente opções individuais:

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

Se este módulo não estiver disponível em sua instalação, você poderá usar o -o teste :

do_something() {
  local eg=no
  [[ -o extended_glob ]] && eg=
  setopt extended_glob
  ⋮
  setopt ${eg}extended_glob
}
    
por 01.07.2012 / 06:15