パラメータ位置に応じたSmart Bashの完成

パラメータ位置に応じたSmart Bashの完成

デフォルトでは、scpを囲むラッパーである単純なbash機能があります。電話してご利用ください

copytomachine <Machine> <File>

簡単なオートコンプリート設定があり、入力するとき

copytomachine <TAB><TAB>

これは利用可能なシステムのリストを提供します。現在ハードコーディングされているシーケンスだけで十分です。

入ると

copytomachine BUILD_SERVER <TAB><TAB>

ディレクトリ内のファイルのリストを提供し、そのパスなどを自動補完できるようにしたいです。ただし、最初のパラメータ(コンピュータ名)に対してこのファイルのリストを指定したくありません。

現在完了スクリプトは次のとおりです。

_machines_completions()
{
    local opts
    opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
    COMPREPLY=( $(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) )
    return 0
}

パラメーター 1 で定義されたコンピューター名に対してタブの完了を実行し、パラメーター 2 のファイル名に対してタブの完了を実行できるように変更する方法を教えてください。

ベストアンサー1

COMP_CWORD単語番号なので、その値をテストできます。

_machines_completions()
{
    local opts
    opts="BUILD_SERVER TEST_SERVER LOCAL_MACHINE"
    case $COMP_CWORD in
        1)
            COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;
        2)
            COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;
    esac
    return 0
}

-o defaultする:

compspec が一致するエントリを生成しない場合、Readline のデフォルトのファイル名補完が使用されます。

おすすめ記事