Я пытаюсь настроить скрипт завершения bash и у меня возникли проблемы.
Я хотел бы настроить его так, чтобы перечисленные дополнения были либо файлами, соответствующими определенному расширению, либо каталогами (которые могут содержать или не содержать файлы этого расширения).
Проблема в том, что у меня есть единственный способ получить дополнения, содержащие файлы и каталоги, используя что-то вроде -o plusdirs -f -X '!*.txt'
, но когда я позволяю bash завершить один из каталогов, он просто добавляет пробел в конец, а не косую черту.
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
Я также перепробовал все закомментированные строки, но они даже не расширяют каталоги.
Для тестирования я запускал это в каталоге с одним файлом .txt и одним каталогом "dir" (с файлом .txt внутри, хотя это пока не имеет значения). Ввод xyz <TAB>
с помощью этой функции выводит каталог и файл .txt, но ввод xyz d<TAB>
расширяется до xyz dir
(ну, с пробелом после "dir").