Bash Completeを設定しようとしていますが、2つの問題があります。
- パラメータ1の場合は、ディレクトリを完成する必要があります。
- 完成のための固定配列であるパラメータ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 -d
when is 1を呼び出すこともできますが、出力で$COMP_CWORD
スペースをエスケープする必要があり、2つのcompgen
結果を区切る改行文字と完成に含まれる改行文字を区別できないため、bashではうまく機能しません(まれな場合)。 、しかし可能)。