最初のパラメータに対してオートコンプリートを設定し、他のパラメータを保持します。

最初のパラメータに対してオートコンプリートを設定し、他のパラメータを保持します。

さまざまなパラメータを必要とするユーティリティがあります。最初のパラメータをオートコンプリートし、他のすべてのパラメータは引き続き正常にオートコンプリートするようにしたいと思います。どうすればいいですか?

function _my_autocomplete_()
{
    case $COMP_CWORD in
        1) COMPREPLY=($(compgen -W "$(get_args_somehow)" -- ${COMP_WORDS[COMP_CWORD]}));;
        *) # What goes here?
    esac
}

complete -F _my_autocomplete_ mycommand

答え1

明らかに私はあなたの質問を完全に逃しました。答えは、明確に定義された「一般的なオートコンプリート」がないことです。ただし、実行したい操作の種類(ファイル、エイリアス、pid、変数名など)がわかっている場合compgenCompgen のマニュアルページ、特に以下の-Aオプションcomplete(同じ)です。たとえば、ファイル名を完成させるには、次のコマンドを使用できます。

compgen -f -- "${COMP_WORDS[COMP_CWORD]}"

コマンドの完成(エイリアス、関数などを含む)が必要な場合は、次のものを使用できます。

compgen -back -A function -- "${COMP_WORDS[COMP_CWORD]}"

使用$COMP_CWORD完成する単語のインデックスを取得します。 indexが1以外の場合に設定され、$COMPREPLY返され()ます。

COMP_CWORD

    An index into ${COMP_WORDS} of the word containing the current 
    cursor position. This variable is available only in shell functions
    invoked by the programmable completion facilities

答え2

他の答えは正しくありません。compgen -fデフォルトの動作に近いですが、まったく同じではありません(違いを確認するには、ディレクトリ名の自動補完を試してください)。

答えは# What goes here?簡単です。compopt -o default

関連情報