
Ich versuche, eine Vervollständigungsfunktion für einen benutzerdefinierten Wrapper um SSH namens myssh zu schreiben. myssh akzeptiert Befehlszeilenargumente in einer der folgenden Formen:
myssh [myssh options] [ssh args]
oder
myssh [myssh options] -- [ssh options] [ssh args]
Wie kann ich die Vervollständigung für myssh-spezifische Optionen bereitstellen und gleichzeitig die vorhandene Vervollständigung für SSH wiederverwenden?
_gnu_generic
edit: Ich würde auch gerne die Funktion nutzenhier erwähntzum Vervollständigen von MySSH-Optionen.
Antwort1
In einem allgemeineren Fall, in dem der Kommentar von @Franklin\ Yu nicht ausreicht, können Sie einen entsprechenden Vervollständigungsbefehl erstellen. Nehmen Sie zum Beispiel den flux
Befehl. Dieser Befehl und viele ähnliche sind ziemlich wählerisch und erwarten als ersten Parameter für den Vervollständigungsbefehl den Namen des ursprünglichen Befehls, daher schlägt dies fehl:
$ compdef myflux=flux
$ myflux<tab>
l2advertisement.yaml pool.yaml # <--- not expected
Dieses Problem lässt sich durch die Einführung eines Hilfsbefehls beheben, der den ersten myflux
in der $words
Variablen ersetzt:
_myflux() {
words="flux ${words[@]:1}" # replace myflux with flux, in `words` array
_flux # call original completion command which expects a words array beginning with `flux`
}
$ compdef _myflux myflux
$ myflux<tab>
bootstrap -- Deploy Flux on a cluster the GitOps way.
build -- Build a flux resource
check ...
...
# the above *is* expected.
Manchmal umschließt man einen Originalbefehl mit Unterbefehlen, wieflux get source
Die Zeile mit der Mutation des $words
Arrays würde dann lauten:
words="flux get source ${words[@]:1}"