Sto cercando di impostare uno script di completamento bash e ho qualche problema.
Vorrei impostarlo in modo che i completamenti elencati siano file corrispondenti a una determinata estensione o directory (che possono contenere o meno file di tale estensione).
Il problema che sto avendo è che l'unico modo per ottenere i completamenti per contenere file e directory è usando qualcosa di simile -o plusdirs -f -X '!*.txt'
, ma quando lascio che bash completi una delle directory, aggiunge semplicemente uno spazio alla fine, piuttosto che un barra.
_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
Ho provato anche tutte le righe commentate, ma non hanno nemmeno ampliato le directory.
Per i test, ho eseguito questo in una directory con un file .txt e una directory "dir" (con un file .txt al suo interno, anche se non ha ancora importanza). La digitazione xyz <TAB>
con questa funzione elenca la directory e il file .txt, ma la digitazione si xyz d<TAB>
espande in xyz dir
(bene, con uno spazio dopo "dir").