引数が --arg=argval 形式を取る場合、bash完了関数を書くことはできますか?

引数が --arg=argval 形式を取る場合、bash完了関数を書くことはできますか?

引数にスペースがない場合にbash完了を作成する方法(= 例:myapp--arg=argVal1または--arg=argVal2

_myapp_completion() {
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    opts="--arg1 --arg2 --arg3" # List of valid options for your application

    case "${prev}" in
        --arg1)
            # If previous word is --arg1, complete the values
            COMPREPLY=($(compgen -W "value1 value2 value3" -- "${cur}"))
            if [[ ${#COMPREPLY[@]} -eq 1 ]]; then
                # If only one completion option, remove space after --arg1=
                COMPREPLY=(${COMPREPLY[@]/#/${prev}=})
            fi
            return 0
            ;;
        *)
            # Default completion logic for other arguments
            COMPREPLY=($(compgen -W "${opts}" -- "${cur}"))
            return 0
            ;;
    esac
}

complete -F _myapp_completion ./myapp

上記の例では、myappスペースなしで後者を使用しています。value1 value2 value3--arg1=

ベストアンサー1

おすすめ記事