Bash 완료를 설정하려고 하는데 두 가지 문제가 있습니다.
- 매개변수 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
한 가지 접근 방식은 다음과 같습니다. dirnames
기본 완성으로 설정하고 두 번째 인수에 대한 사용자 정의 완성을 생성합니다.
_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
출력에서 공백을 이스케이프 처리해야 compgen
하고 두 결과를 구분하는 개행 문자와 완성에 포함된 개행 문자를 구분할 수 없기 때문에 bash에서는 잘 작동하지 않습니다(드문 경우). , 그러나 가능).