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 от головы мерзавца и источника, который сверху текущего, кажется, решает проблему как временный обходной путь / решение.

Другие вопросы по тегам