zsh: Como verificar se uma opção está ativada

33

Para ativar uma opção, podemos usar setopt . por exemplo:

setopt extended_glob

Como podemos verificar se uma opção está ativada atualmente?

    
por Sébastien 27.03.2014 / 17:20

3 respostas

34

Em zsh , você pode usar setopt para mostrar as opções ativadas e unsetopt para mostrar quais não estão ativadas:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

$ unsetopt
noaliases
allexport
noalwayslastprompt
alwaystoend
noappendhistory
autocd
autocontinue
noautolist
noautomenu
autonamedirs
.....

Em bash , você pode usar shopt -p .

    
por 27.03.2014 / 17:43
13

Use apenas:

[[ -o extended_glob ]]

Isso também funciona em bash , mas apenas nas opções definidas por set -o , não nas definidas por shopt . zsh tem apenas um conjunto de opções que podem ser definidas com setopt ou set -o .

Assim como com bash (ou qualquer shell POSIX), você também pode fazer set -o ou set +o para ver as configurações atuais da opção.

    
por 02.04.2014 / 13:56
10

O módulo zsh/parameter , que faz parte do distribuição padrão, fornece uma matriz associativa options que indica quais opções estão em.

if [[ $options[extended_glob] = on ]]; then …

Para opções que possuem um alias de uma única letra (que não é o caso de extended_glob ), você também pode verificar $- .

Observe que raramente é útil testar quais opções estão ativadas. Se você precisar ativar ou desativar uma opção em um trecho de código, coloque esse código em uma função e defina as local_options . Você pode chamar o emulate incorporado para redefinir as opções para um estado padrão.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
    
por 28.03.2014 / 03:28

Tags