2017-05-17 2 views
1

Ich habe einen ZSH Abschluss Skriptdefinieren ZSH Vervollständigungsfunktion (compdef) für mehrere Befehle

#compdef kubens 
_arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))" 

Dies stellt Ergänzung zur kubens Befehl aufgerufen. Wenn der Benutzer jedoch ein bestimmtes Installationsargument zur Verfügung stellt, wird das Programm mit dem Namen kns verknüpft, so dass ich versuche, für beide Befehle denselben Befehl #compdef auszuführen.

Wie erreiche ich das?

Antwort

1

Wir könnten die cmd=service Form für die #compdef Zeile verwenden:

#compdef kubens kns=kubens 

Obwohl wir mehr Namen für die #compdef Zeilen verwenden können, cmd=service Formen verwendet werden könnten, wenn die cmd die gleiche Art und Weise verhält, wie die service:

#compdef name ... [ -{p|P} pattern ... [ -N name ... ] ]

Die Datei wird autoloadable und die Funktion darin aufgerufen wird definiert gebildet werden, wenn Namen abgeschlossen, die jeweils entweder der Name eines Befehls, dessen Argumente abgeschlossen werden soll ...
...
Jeder Name kann auch die Form 'cmd=service' haben. Beim Ausführen des Befehls cmd verhält sich die Funktion normalerweise so, als ob stattdessen der Befehl (oder der spezielle Kontext) Dienst abgeschlossen würde.

- zshcompsys(1): Completion System, INITIALIZATION, Autoloaded files, #compdef

+0

Danke, es sieht aus wie diese Informationen etwas im Handbuch und kein Google-Suchergebnis enthüllt begraben wurde. Ich hoffe, diese Frage hilft anderen. –