
私は、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}"