Ich versuche, ein Skript zur Bash-Vervollständigung einzurichten, und habe einige Probleme.
Ich möchte es so einrichten, dass die aufgeführten Vervollständigungen entweder Dateien sind, die einer bestimmten Erweiterung entsprechen, oder Verzeichnisse (die Dateien dieser Erweiterung enthalten können oder nicht).
Das Problem ist, dass ich die Vervollständigungen nur mit so etwas wie Dateien und Verzeichnissen abrufen kann. -o plusdirs -f -X '!*.txt'
Wenn ich jedoch zulasse, dass Bash eines der Verzeichnisse vervollständigt, wird statt eines Leerzeichens ein Leerzeichen am Ende eingefügt Schrägstrich.
_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
Ich habe auch alle auskommentierten Zeilen ausprobiert, aber sie erweitern nicht einmal die Verzeichnisse.
Zum Testen habe ich dies in einem Verzeichnis mit einer TXT-Datei und einem Verzeichnis "dir" ausgeführt (mit einer TXT-Datei darin, obwohl das noch keine Rolle spielt). Wenn Sie xyz <TAB>
mit dieser Funktion tippen, werden das Verzeichnis und die TXT-Datei aufgelistet, die Eingabe wird jedoch auf xyz d<TAB>
erweitert xyz dir
(also mit einem Leerzeichen nach "dir").