ディレクトリと固定セットを使用したカスタムbashの完成

ディレクトリと固定セットを使用したカスタムbashの完成

Bash Completeを設定しようとしていますが、2つの問題があります。

  1. パラメータ1の場合は、ディレクトリを完成する必要があります。
  2. 完成のための固定配列であるパラメータ2の場合、bashで選択を実行する方法がわかりませんでした。以前は、複雑なスクリプトには常にPerlスクリプトを使用していました。
_some_func()
{
    case $COMP_CWORD in
    1)
        # default completion ? how
        ;;
    2)
        COMPREPLY=( "go" "unbind" )
        # I should be using a program to echo "go" and "unbind",
        # and let bash decide which one to complete , right ? 
        # that's the only two possible parameters here
        ;;
    esac
}

complete -F _some_func some_func

ベストアンサー1

1つのアプローチは次のとおりです。dirnamesデフォルトの補完に設定し、2番目の引数のカスタム補完を作成します。

_some_func () {
  case $COMP_CWORD in
    1) :;; # let the default take over
    2) COMPREPLY=($(compgen -W "go unbind" "${COMP_WORDS[$COMP_CWORD]}"));;
    *) COMPREPLY=("");;
  esac
}
complete -F _some_func -d some_func

compgen -dwhen is 1を呼び出すこともできますが、出力で$COMP_CWORDスペースをエスケープする必要があり、2つのcompgen結果を区切る改行文字と完成に含まれる改行文字を区別できないため、bashではうまく機能しません(まれな場合)。 、しかし可能)。

おすすめ記事