bash complete: Verzeichnisnamen aus einem definierten Verzeichnis auflisten?
934
zenatom
Ich brauche die Verzeichnisnamen in / mailman / lists, um als Argument (ohne Schrägstriche) an den Befehl 'list_members' zu übergeben, unabhängig davon, wo ich mich im Dateisystem befinde.
In tcsh (auf unserem alten Server) schrieb ich eine Zeile, um das zu tun, was ich brauchte:
bashs Implementierung scheint komplexer zu sein. Wie kann ich dieses Verhalten mit bash implementieren?
Die Tab-Vervollständigung muss kontextsensitiv sein, damit der Teil des Arguments, das ich bereits eingegeben habe, die Suche einschränkt, genau wie die Standard-Bash-Vervollständigung. Beispiel:
list_members sys<TAB> #only shows names beginning with sys
Ich habe ein paar Lösungen ausprobiert, nachdem ich Beispiele angeschaut hatte, aber sie funktionieren nicht richtig.
-bash: compgen: warning: -C option may not work as you expect
Ein anderes fehlerhaftes Beispiel:
function _listlists() { cd /mailman/lists COMPREPLY=( $( compgen -d ) ) cd - } complete -F _listlists list_members
Dies zeigt alle Ergebnisse dieses Verzeichnisses an "more", reagiert jedoch nicht auf das teilweise eingegebene Argument, das ich bereits eingegeben habe.
Vielen Dank.
2 Antworten auf die Frage
2
zenatom
Mein Kollege hat diese Lösung direkt nach der Veröffentlichung der Frage gefunden. Es läuft gut:
function _listlists() { local cur COMPREPLY=() cur=$ COMPREPLY=($( compgen -W "$(ls -d /mailman/lists/*/|cut -d "/" -f 4)" -- $cur ) ) } complete -F _listlists list_members
Wie kann ich Dateinamen unterstützen, die Leerzeichen enthalten?
Tony Barganski vor 6 Jahren
0
1
return42
Ich habe eine Lösung mit den HOME-Ordnern getestet (kein Mailman auf meinem Host). Suchst du danach?
function _homes() { local homes=("/home/$2"*) [[ -e $ ]] && COMPREPLY=( "$" ) } complete -F _homes homes alias homes='echo you selected:'
Danke, Rückkehr42. Es tut mir leid, dass ich Ihre Lösung nicht getestet habe.
zenatom vor 9 Jahren
0