nullglob отключает завершение пути
Я обнаружил, что shopt -s nullglob
по-видимому, отключает завершение табуляции для файлов и каталогов, и shopt -u nullglob
восстанавливает это. Почему завершение вкладок для каталогов, очевидно, полагается на nullglob
быть незаданным?
Я использую Bash 4.2.37(1)-release
на Debian 7.
1 ответ
По-видимому, это известная проблема с bash-complete и указана в качестве цели, которая должна быть исправлена в версии 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 вызывает проблему, указанную в этом письме.
Редактировать: теперь я понимаю, что происходит. Проблема в том, что глобальное расширение тупо. Видит все "слово" $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-complete (каким-то образом, о котором я не думал, но который явно лучше).
Этот коммит исправляет это. Есть и другие исправления.
Хватая __reassemble_comp_words_by_ref
от головы мерзавца и источника, который сверху текущего, кажется, решает проблему как временный обходной путь / решение.