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}"