J'essaie d'obtenir un script de complétion bash et j'ai des problèmes.
Je voudrais le configurer pour que les complétions répertoriées soient soit des fichiers correspondant à une extension particulière, soit des répertoires (qui peuvent ou non contenir des fichiers de cette extension).
Le problème que j'ai est que la seule façon d'obtenir des compléments pour contenir des fichiers et des répertoires est d'utiliser quelque chose comme -o plusdirs -f -X '!*.txt'
, mais quand je laisse bash terminer l'un des répertoires, cela ajoute juste un espace à la fin, plutôt qu'un sabrer.
_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
J'ai également essayé toutes les lignes commentées, mais elles ne développent même pas les répertoires.
Pour les tests, je l'ai exécuté dans un répertoire avec un fichier .txt et un répertoire "dir" (avec un fichier .txt à l'intérieur, bien que cela n'ait pas encore d'importance). Taper xyz <TAB>
avec cette fonction répertorie le répertoire et le fichier .txt, mais la frappe se xyz d<TAB>
développe en xyz dir
(enfin, avec un espace après "dir").
Je pense que cette solution simple fonctionne en ce sens qu'elle:
.txt
La clé passait
-o filenames
pour terminer. Cela a été testé sur GNU bash 3.2.25 sur RHEL 5.3 et GNU bash 4.3.18 sur osxla source