問題点
-list から -listDevice のようなcompletion が出来なくて、invalid option なっちゃう。
$ networksetup -list<TAB> compgen 無効な引数です
キーワードの補完ができない。
ハイフンを付けた引数を補完するときは
compgen にハイフンをハイフン( -- )で渡してあげる。
compgen -W $list -- ${COMP_WORDS[COMP_CWORD]
-list -listdevice などのハイフンが入ったオプションを補完しようとすると、無効なオプション として compgen がwordとして compgen自身へのオプションとして持っていっちゃう
つまり
compgen -W ワードリスト -- '-list'
のようにしてあげないと、 -list から -listDevice のようなcompletion が出来なくて、invalid option なっちゃう。
compgen の使い方
compgen の使い方を見ておくと、次のようになっている。
compgen: compgen [-abcdefgjksuv] [-o option]
[-A action] [-G globpat] [-W wordlist] [-F function]
[-C command] [-X filterpat] [-P prefix] [-S suffix] [word]
オプションに基づいた補完候補を表示します。
シェル関数の中で補完候補を生成するために使用するように意図されています。
オプション引数 WORD が与えられた場合、WORD に対して一致した候補が生成
されます。
終了ステータス:
無効なオプションが与えられるかエラーが発生しない限り成功を返します
サンプル
-listXXXX が大量にあるコマンド補完する例です。
#!/usr/bin/env bash ### 補完関数。 _takuya_networksetup (){ curr="${COMP_WORDS[@]}" prev="${COMP_WORDS[$COMP_CWORD-1]}" cmd_name=networksetup if [[ $prev =~ $cmd_name ]] ; then sub_command_list=$( networksetup -h | /usr/bin/grep networksetup | awk '{print $2}' ) COMPREPLY=( $(compgen -W "$sub_command_list" -- ${COMP_WORDS[COMP_CWORD]} ) ) fi } complete -F _takuya_networksetup networksetup
参考商品

- 出版社/メーカー: Amazon
- 発売日: 2016/12/05
- メディア: エレクトロニクス
- この商品を含むブログ (1件) を見る