
Estou tentando escrever uma função de conclusão para um wrapper personalizado em torno do SSH chamado myssh. myssh aceita argumentos de linha de comando em qualquer uma das seguintes formas:
myssh [myssh options] [ssh args]
ou
myssh [myssh options] -- [ssh options] [ssh args]
Como posso fornecer preenchimento para opções específicas do myssh enquanto reutilizo o preenchimento existente para ssh?
editar: eu também gostaria de usar a _gnu_generic
funçãomencionado aquipara completar as opções myssh.
Responder1
Em um caso mais geral, onde o comentário de @Franklin\ Yu não é suficiente, você pode executar um comando de conclusão correspondente. Tomemos por exemplo o flux
comando. Este comando, e muitos outros semelhantes, é bastante exigente e espera que seu primeiro parâmetro para o comando de conclusão seja o nome do comando original, então isso falha:
$ compdef myflux=flux
$ myflux<tab>
l2advertisement.yaml pool.yaml # <--- not expected
A introdução de um comando auxiliar que substitui o primeiro myflux
na $words
variável corrige isso:
_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.
Às vezes você está agrupando um comando original com subcomandos, comoflux get source
A linha com a mutação do $words
array se tornaria então:
words="flux get source ${words[@]:1}"