Я пытаюсь настроить скрипт завершения 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").
