
Estoy intentando escribir una función de finalización para un contenedor personalizado alrededor de SSH llamado myssh. myssh toma argumentos de línea de comando en cualquiera de las siguientes formas:
myssh [myssh options] [ssh args]
o
myssh [myssh options] -- [ssh options] [ssh args]
¿Cómo puedo proporcionar finalización para opciones específicas de myssh mientras reutilizo la finalización existente para ssh?
editar: también me gustaría usar la _gnu_generic
funciónmencionado aquípor completar las opciones de myssh.
Respuesta1
En un caso más general donde el comentario de @Franklin\ Yu no es suficiente, puedes realizar el comando de finalización correspondiente. Tomemos por ejemplo el flux
comando. Este comando, y muchos similares, es bastante exigente y espera que su primer parámetro del comando de finalización sea el nombre del comando original, por lo que esto falla:
$ compdef myflux=flux
$ myflux<tab>
l2advertisement.yaml pool.yaml # <--- not expected
La introducción de un comando auxiliar que reemplaza el primero myflux
en la $words
variable soluciona este problema:
_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.
A veces estás envolviendo un comando original con subcomandos, comoflux get source
La línea con la mutación del $words
array quedaría entonces:
words="flux get source ${words[@]:1}"