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