Bash-Vervollständigung: Erstellen Sie eine Wortliste, als wären sie Pfade. Schlagen Sie nur bis zum nächsten Schrägstrich vor

Ich arbeite an einem Bash-Vervollständigungsskript für aDienstprogramm zur Verwaltung von Punktdateien. Das Tool hat einen Befehldots diff [filename] Dadurch wird der Unterschied zwischen der installierten Punktdatei und der Quellpunktdatei angezeigt. Es hat auch einen Befehldots files Hier werden die Pfade aller verwalteten Punktdateien (relativ zum Quellverzeichnis) aufgelistet. Ich möchte den Befehl diff mit der Ausgabe des Befehls files vervollständigen.

Hier ist ein Beispiel für die Ausgabe von Dateien

X11/xkb/symbols/evan-custom
X11/xorg.conf.d/10-dual-monitors.conf
X11/xorg.conf.d/10-keylayout.conf
bash/aliases
bash/bashrc
bash/completion.d/dots
bash/profiles/standard-user
bash/profiles/systemd-user
bspwm/bspwmrc
compton/compton.conf
fontconfig/fonts.conf
git/config
git/ignore
gtk-2.0/gtkrc
gtk-3.0/settings.ini
mysql/config
mysql/grcat
ncmpcpp/config
pulse/client.conf
pulse/daemon.conf
pulse/default.pa
ssh/config
sublime-text-3/Packages/User/Preferences.sublime-settings
sxhkd/sxhkdrc
termite/config
transmission-daemon/settings.json
vim/vimrc

Mit so etwas

COMPREPLY=( $(compgen -W "$(dots files)" -- $cur) )

Funktioniert jedoch, wenn readline die verfügbaren Optionen auflistet, werden die vollständigen Pfade aufgelistet (die Liste oben).

Ich möchte, dass die Wörter so behandelt werden, als wären sie Dateipfade und wenn Vorschläge aufgelistet werden, nur bis zum ersten Schrägstrich.

Zum Beispiel, wenn ich tipptedots diff [tab][tab] Folgendes sollte gedruckt werden

X11/
bash/
bspwm/
compton/
fontconfig/
git/
gtk-2.0/
gtk-3.0/
mysql/
ncmpcpp/
pulse/
ssh/
sublime-text-3/
sxhkd/
termite/
transmission-daemon/
vim/

Wenn ich zum Beispiel dann getippt habedots diff bash/[tab][tab] dann würde es zeigen

aliases
bashrc
completion.d/
profiles/

Idealerweise möchte ich esBehandle es tatsächlich als einen Weg so dass die readline Option ändernmark-directories zu aus würde die abschließenden Schrägstriche ausschließen.

Ich habe versucht, Einstellungen vorzunehmencompopt -o filenames Dies gibt jedoch statt der Pfade zunächst Vorschläge für die Dateinamen.

Hier ist das Abschlussskript, das ich bisher habe

Antworten auf die Frage(3)

Ihre Antwort auf die Frage