Невозможно заполнить zsh автодополнение простым выводом ls - PullRequest
1 голос
/ 15 ноября 2010

Проблема в том, что я не могу найти способ правильно заполнить массив boxes. Вот код:

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

Выдает исключение:

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

Команда ls работает нормально при попытке вручную:

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

Где моя ошибка?

Ответы [ 3 ]

1 голос
/ 15 ноября 2010

Вот что решило проблему:

_wanted application expl 'command' compadd $(command ls -1 $HOME/.vagrant/boxes 2>/dev/null| sed -e 's/ /\\ /g')
1 голос
/ 15 ноября 2010

zsh не похоже на пробелы вокруг =.

boxes=$(ls $HOME/.vagrant/boxes --color=none) работает, что делает нас на шаг впереди, может быть.

0 голосов
/ 16 ноября 2010

То, что вы ищете, это

boxes=($HOME/.vagrant/boxes/*(N:t))
  • Не анализируйте вывод ls.
  • В синтаксисе оболочки выне может быть пробелов вокруг = в присваивании.
  • boxes=(…) создает массив.
  • (N:t) сохраняет только базовые имена файлов, соответствующих шаблону.В скобках вводятся glob определители N означает, что расширение будет пустым, если не найдено ни одного файла, а : означает, что следующим символом является модификатор истории .
...