bash Autovervollständigung die Zweite

Gestern habe ich über die Autovervollständigung der bash geschrieben. Heute möchte ich kurz beschreiben wie ich das Verhalten verbessert habe.
Die noch fehlenden Funktionen waren:

  1. Die Autovervollständigung von Verzeichnisnamen
  2. Die Autovervollständigung von csv-Dateien in anderen Verzeichnissen als dem aktuellen.

Das Skript habe ich nun folgendermaßen abgeändert:

_csv2qif_possible_csvFiles()
{
local curWord csvs optfiles
curWord=${1}
optfiles=""
csvs=$( compgen -f -X "!*.csv" -- "${curWord}" )
for file in ${csvs}; do
if [ ! -f ${file/\.csv/.qif} ]; then
optfiles="${optfiles} ${file}"
fi
done
echo $optfiles
}
_csv2qif()
{
local cur opts
cur="${COMP_WORDS[COMP_CWORD]}"
opts=$(_csv2qif_possible_csvFiles ${cur})
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
}
complete -o plusdirs -F _csv2qif csv2qif.py
view raw bashCompletion2.sh hosted with ❤ by GitHub

In Zeile 25 wird die Funktion Nr. 2 (Autovervollständigung von Verzeichnisnamen) realisiert. Durch den Parameter -o plusdirs wird die Liste der Autovervollständigung um die möglichen Verzeichnisse erweitert.

In Zeile 6 wird die Funktion Nr. 1 (andere Verzeichnisse als das aktuelle) realisiert. Die bash „hat da schon etwas vorbereitet“: compgen -f -X “!*.csv” — “${curWord}” Stellt eine Liste für die Autovervollständigung zusammen. Und zwar werden hier für den Parameter ${curWord} alle passenden Dateien (-f) mit der Endung .csv (-X “!*.csv”) Aufgelistet. Dabei wird schon bedacht, dass der Parameter auf ein anderes Verzeichnis zeigen könnte…

Finde ich super.
Dieses Mal habe ich meine Inspiration in der bash-Referenz gefunden, unter Programmable-Completion.