Автодополнение всегда предлагает файлы в текущем каталоге

Автодополнение всегда предлагает файлы в текущем каталоге

При использовании автодополнения для любой команды, использующей встроенную _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 (и, возможно, в других системах).

Связанный контент