
myssh라는 SSH 관련 사용자 정의 래퍼에 대한 완료 함수를 작성하려고 합니다. myssh는 다음 형식 중 하나로 명령줄 인수를 사용합니다.
myssh [myssh options] [ssh args]
또는
myssh [myssh options] -- [ssh options] [ssh args]
SSH에 대한 기존 완성 기능을 재사용하면서 myssh 관련 옵션에 대한 완성 기능을 제공하려면 어떻게 해야 합니까?
편집: 저도 이 _gnu_generic
기능을 사용하고 싶습니다여기서 언급한myssh 옵션을 완료하기 위한 것입니다.
답변1
@Franklin\ Yu의 설명이 충분하지 않은 보다 일반적인 경우에는 해당 완료 명령을 만들 수 있습니다. 예를 들어 flux
명령을 생각해보십시오. 이 명령 및 이와 유사한 명령은 다소 까다로우며 완료 명령에 대한 첫 번째 매개변수가 원래 명령의 이름이 될 것으로 예상하므로 이 명령은 실패합니다.
$ compdef myflux=flux
$ myflux<tab>
l2advertisement.yaml pool.yaml # <--- not expected
myflux
변수 의 첫 번째 항목을 대체하는 도우미 명령을 도입하면 $words
이 문제가 해결됩니다.
_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.
때로는 원본 명령을 다음과 같은 하위 명령으로 래핑하는 경우도 있습니다.flux get source
그러면 배열의 변형이 있는 줄은 다음 $words
과 같습니다.
words="flux get source ${words[@]:1}"