デフォルトの完成スクリプトを定義しました。プログラムdの場合は、exempt、limit、show、およびupdateサブコマンドを使用できます。
complete -W "exempt limit show update" d
しかし、後でTabを押すと、d exempt
bashは完了メニューを再表示します。
$ d <tab>
exempt limit show update
$ d exempt <tab>
exempt limit show update
$ d exempt exempt <tab>
exempt limit show update
Bashが同じ単語を繰り返し挿入するのを防ぐ方法は?
答え1
あなたが見ているのは、基本的な完成メカニズムを使用するときに予想される動作ですcomplete -W
。
よりスマートな完成が必要な場合は、完成関数を作成する必要があります(「プログラミング可能な完成」セクションを参照)。バッシュマニュアル)とを使用してくださいcomplete -F
。
例を調整する方法は次のとおりです。
$ comp_d() {
COMPREPLY=( $(
if [ "$COMP_CWORD" -eq 1 ]; then
compgen -W "exempt limit show update" "$2"
fi
) )
}
$ complete -F comp_d d
これらの関数は完成候補を配列として返す必要がありますCOMPREPLY
。ユーザーが最初のパラメータ(1)を完成したCOMP_CWORD
場合にのみ単語リストを使用し、そうでなければ配列は空です。