2010-11-15 33 views
1

Le problème est que je ne trouve pas un moyen de remplir correctement tableau boxes. Voici le code:Impossible de remplir zsh autocompletion avec la sortie simple ls

local expl 
declare -a boxes 
boxes = $(ls $HOME/.vagrant/boxes --color=none) 
_wanted boxes expl 'help' compadd $boxes 

lance une exception:

vagrant help __box_list:13: command not found: boxes 
__box_list:13: command not found: boxes 
__box_list:13: command not found: boxes 

commande ls fonctionne très bien si essayé manuellement:

ls $HOME/.vagrant/boxes --color=none 
lucid32 lucid64 

Où est mon erreur?

Répondre

1

zsh ne semble pas aimer les espaces autour du =.

boxes=$(ls $HOME/.vagrant/boxes --color=none) fonctionne, ce qui nous permet d'aller un peu plus loin, peut-être.

1

C'est ce qui a résolu le problème:

_wanted application expl 'command' compadd $(command ls -1 $HOME/.vagrant/boxes 2>/dev/null| sed -e 's/ /\\ /g') 
0

Qu'est-ce que vous cherchez est

boxes=($HOME/.vagrant/boxes/*(N:t)) 
  • Don't parse the output of ls.
  • Dans la syntaxe shell, vous ne pouvez pas avoir des espaces autour de la = dans une affectation.
  • boxes=(…) crée un tableau.
  • (N:t) conserve uniquement les noms de base des fichiers correspondants au modèle. Les parenthèses introduisent glob qualifiers. N signifie que l'extension sera vide si aucun fichier ne correspond et : signifie que le caractère suivant est un .