При использовании автодополнения для любой команды, использующей встроенную _longopt
функцию завершения (например mkdir
, ), оболочка всегда предлагает содержимое текущего каталога в дополнение к желаемым предложениям.
Например, если я наберу
mkdir ~/somedir
и нажмите Tab два раза. Bash предложит: (предполагая, что тип текущий каталог содержит applications
, desktop
и т.д.)
applications/ desktop/ documents/
...
somedir_a/ somedir_b/
Как восстановить нормальное поведение и заставить bash предлагать только файлы и каталоги somedir_a
, а somedir_b
не другие файлы/каталоги?
Версия Bash: GNU bash, version 5.0.11(1)-release (x86_64-redhat-linux-gnu)
Bash-дополнение:2.8
решение1
Такое поведение может быть вызвано опцией оболочки nullglob
, которая, например, может быть включена в вашем .bashrc
.
Причина в том, что _longopt
в определении функции есть ошибка, которая и приводит к такому поведению при _longopt
включении.
Решение — отключить эту опцию или переопределить _longopt
функцию самостоятельно.
Похожий эффект также описан здесь:Почему nullglob влияет на автодополнение табуляции?, хотя этот вопрос довольно сложно найти, если вы не знаете, что эта опция неисправна.
EDIT: Как отметил@фра-сан, этоизвестная проблемас bash-completion
. Исправление появилось в версии 2.9
, однако эта версия еще не поставляется в Fedora (и, возможно, в других системах).