Это, очевидно, известная проблема с Баш-завершения и указана как цель, чтобы быть исправлена в версии 3.0.
Но, видимо, это было именно так, по крайней мере, 2012
См https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666933 для справки.
Изменить: По крайней мере, 2011: http://thread.gmane.org/gmane.comp.shells.bash.completion.devel/3652
Я не совсем понимаю, как nullglob вызывает проблемы, перечисленные в этом письме, хотя.
Редактировать: Теперь я понимаю, что происходит. Проблема в том, что расширение glob является немым. Он видит всего «слово» $2[$j]=\${!ref}\${COMP_WORDS[i]}
как единый глобус и пытается его расширить. Обычно это терпит неудачу, и он остается один, но будет nullglob
по этому аргументу просто исчезает (тем самым вызывая проблему).
Быстрое тестирование показывает, что замена этого:
eval $2[$j]=\${!ref}\${COMP_WORDS[i]}
либо:
eval $2\[$j\]=\${!ref}\${COMP_WORDS\[i\]}
или:
eval "$2[$j]=\${!ref}\${COMP_WORDS[i]}"
, кажется, решить эту проблему. Однако я не могу ручаться за то, что это было полностью исправленное решение.
Обновление: Это уже исправлено в репозитории git-завершения для debian bash (в некотором смысле, о котором я не думал, но который явно лучше).
This commit исправляет его. Существуют и другие исправления, связанные с глобированием.
Захват __reassemble_comp_words_by_ref
из git head и sourcing, который, в верхней части текущего, кажется, устраняет проблему как временное решение/решение.
Я не вижу этого здесь. Какая версия bash? Какое распределение? С какой командой вы тестируете это? –
@EtanReisner Различные команды - встроенные функции, такие как 'echo', такие программы, как' ls', aliases .... Я не думаю, что это имеет значение, так как табуляция для путей не является специфичной для команды. Я добавил свою версию Bash и дистрибутив Linux к этому вопросу. –
Завершение табуляции фактически зависит от команды (см. Вывод из 'complete' для получения дополнительной информации об этом). Вы можете легко сломать завершение для определенной команды, не нарушая при этом полного завершения. –