zsh: Comment vérifier si une option est activée

39

Pour activer une option, nous pouvons utiliser setopt. par exemple:

setopt extended_glob

Comment pouvons-nous vérifier si une option est actuellement activée?

Sébastien
la source

Réponses:

42

Dans zsh, vous pouvez utiliser setoptpour afficher les options activées et unsetoptpour indiquer celles qui ne le sont pas:

$ setopt
autocd
histignorealldups
interactive
monitor
sharehistory
shinstdin
zle

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

En bash, vous pouvez utiliser shopt -p.

cuonglm
la source
Il est à noter que setoptseules les options non activées par défaut pour ce mode d'émulation sont imprimées.
Llua
6
Vous devriez utiliser set -opour la liste complète.
Kutsan Kaplan
16

Il suffit d'utiliser:

[[ -o extended_glob ]]

Cela fonctionne également dans bash, mais uniquement pour les options définies par set -o, pas celles définies par shopt. zshpossède un seul jeu d’options pouvant être défini avec setoptou set -o.

Tout comme avec bash(ou n’importe quel shell POSIX), vous pouvez aussi faire set -oou set +ovoir les paramètres d’option actuels.

Stéphane Chazelas
la source
11

Le zsh/parametermodule, qui fait partie de la distribution par défaut, fournit un tableau associatif optionsindiquant les options activées.

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

extended_globVous pouvez également vérifier si les options ont un alias à une seule lettre (ce qui n’est pas le cas ) $-.

Notez qu'il est rarement utile de tester les options activées. Si vous devez activer ou désactiver une option dans un morceau de code, insérez ce code dans une fonction et définissez l' local_optionsoption. Vous pouvez appeler la commande emulateintégrée pour réinitialiser les options à un état par défaut.

my_function () {
  setopt extended_glob local_options
}
another_function () {
  emulate -L zsh
  setopt extended_glob
}
Gilles, arrête de faire le mal
la source