Complete 組込みコマンドは行編集におけるコマンドライン補完の方式を表示・設定します。
complete [-C コマンド] [-O オプション] [-Xabcdfghjkuv] [-F 関数] [-D 説明] [文字列…]
complete -P [-C コマンド] [-O オプション]
complete -R [-C コマンド] [-O オプション]
complete -G 文字列…
-P
(--print
) オプションを付けて実行すると、complete コマンドはこれまでに設定された補完方式の設定を標準出力に出力します。出力はコマンドとして実行することで設定内容を復元できるようになっています。デフォルトではすべての設定内容を出力しますが、-C
(--target-command
) オプションおよび -O
(--target-option
) オプションを指定するとそのコマンド・オプションに関する設定のみ出力します。
-R
(--remove
) オプションを付けて実行すると、complete コマンドはこれまでに設定された補完方式の設定を消去します。デフォルトではすべての設定を消去しますが、-C
オプションおよび -O
オプションを指定するとそのコマンド・オプションに関する設定のみ消去します。
-P
オプションも -R
オプションも付けずに -C
オプションを付けて実行すると、-C
オプションで指定したコマンドに対する補完方式の設定を行います。補完方式設定用のオプションおよびオペランド (下記参照) が、そのコマンドの引数の補完の仕方を指定します。-O
オプションも共に指定した場合は、そのオプションに対する設定となります。補完方式設定用のオプションおよびオペランドはオプションの引数の補完方法を指定します。補完方式の設定は累積的です。すなわち、設定はそれまでの設定を上書きするのではなく、前の設定に追加されます。
-P
オプションも -R
オプションも -C
オプションも付けずに実行すると、現在行っている補完に対する補完候補を生成します。これは生成関数 (下記 -F
オプション参照) の中でのみ行えます。-G
(--delegate
) オプションを指定しない場合、指定した補完方式設定用のオプションおよびオペランドに従って候補を生成します。-G
を指定した場合、指定した文字列が現在補完を行おうとしている (入力途中の) コマンド・引数であるとして補完を試みます。
-C コマンド
, --target-command=コマンド
-O オプション
, --target-option=オプション
-a -b
は -ab
とできます)。短いオプションは、ハイフンを除いたオプション一文字として -O
オプションの引数に指定します (例えば -O a
または --target-option=a
)。
-O
オプションの引数として指定します (例えば -O -Wall
または --target-option=--help
)。
-P
, --print
-R
, --remove
-X
, --intermixed
-D 説明
, --description=説明
-O
オプションと共に指定した場合は、そのオプションの説明として、そうでない場合は、-C
オプションで指定したコマンドの説明として使われます。
以下のオプションは、コマンドのオペランドまたはオプションの引数を補完するための候補の種類を指定します。
-a
, --alias
--normal-alias --global-alias
に同じ)
--array-variable
--bindkey
-b
, --builtin
--special-builtin --semi-special-builtin --regular-builtin
に同じ)
-c
, --command
--builtin --external-command --function
に同じ)
-d
, --directory
--executable-file
--external-command
-f
, --file
--finished-job
--function
--global-alias
-g
, --group
-h
, --hostname
-j
, --job
-k
, --keyword
--normal-alias
--regular-builtin
--running-job
--scalar-variable
--semi-special-builtin
--signal
--special-builtin
--stopped-job
-u
, --username
-v
, --variable
-F 関数
, --generator-function=関数
-C
, -P
, -R
オプションを付けずに補完方式設定のためのオプションまたはオペランドを指定して実行すると、そのオプションまたはオペランドに従って補完候補が動的に追加されます。
Complete コマンドのオペランドは、各オペランドがそれぞれ補完候補として扱われます。
エラーがない限り complete コマンドの終了ステータスは 0 です。ただし、complete コマンドの中で生成関数を実行した場合は、その関数の終了ステータスが complete コマンドの終了ステータスになります。
Rmdir コマンドは -p
オプションを取り、オペランドとしてディレクトリ名を受け付けます:
complete -C rmdir -d
complete -C rmdir -O p
このとき -p
オプションに説明を付加する場合は、以下のようにします。
complete -C rmdir -O p -D '親ディレクトリも削除する'
オプションとオペランドを以下のように同時に指定してはいけません。このように指定すると、-p
オプションがディレクトリ名を引数として受け取るものとみなされてしまいます。
complete -C rmdir -O p -d # 間違った例
GNU core utilities の ls コマンドの -a
オプションと --all
オプションのように、一つのコマンドに同じ意味を持つ短いオプションと長いオプションがある場合は、それらを同時に指定できます。複数の短いオプションまたは複数の長いオプションを同時に指定することは (それらが同じ意味であるかにかかわらず) できません:
complete -C ls -O a -O --all # 正しい例
complete -C less -O --silent -O --quiet # 間違った例
オプションが引数を取る場合は、その引数の種類をオプションで指定します。例えば cd コマンドの --default-directory
オプションはディレクトリ名を引数として受け取ります:
complete -C cd -O --default-directory -d
コマンドのオペランドまたはオプションの引数の値が固定化されている場合は、オペランドでそれを直接指定します。例えば GNU core utilities の ls コマンドの --color
オプションは、always
, auto
, force
, if-tty
, never
, no
, none
, tty
, yes
という九つの値を引数として受け取ります:
complete -C ls -O --color always auto force if-tty never no none tty yes
これらの値に説明を付け加えたい場合は、同じ説明を与えたい値ごとに指定します。
complete -C ls -O --color -D '常にカラー表示する' always force yes
complete -C ls -O --color -D '常にカラー表示しない' never no none
complete -C ls -O --color -D '出力が端末ならカラー表示する' auto if-tty tty
なお、--color
オプションに対する説明も指定できます (オペランドを指定していない点に注意):
complete -C ls -O --color -D '出力をカラー表示するか設定する'
POSIX には complete コマンドに関する規定はありません。