기본 완성 스크립트를 정의했습니다. 프로그램 d의 경우 exempt,limit,show 및 update 하위 명령을 사용할 수 있습니다.
complete -W "exempt limit show update" d
그러나 나중에 Tab을 누르면 d exempt
bash는 완성 메뉴를 다시 표시합니다.
$ d <tab>
exempt limit show update
$ d exempt <tab>
exempt limit show update
$ d exempt exempt <tab>
exempt limit show update
Bash가 동일한 단어를 반복해서 삽입하는 것을 방지하는 방법은 무엇입니까?
답변1
당신이 보고 있는 것은 기본 완성 메커니즘을 사용할 때 예상되는 동작입니다 complete -W
.
더 스마트한 완성을 원한다면 완성 함수를 작성해야 합니다("프로그래밍 가능한 완성" 섹션 참조).배쉬 매뉴얼) 및 를 사용합니다 complete -F
.
예시를 조정하는 방법은 다음과 같습니다.
$ comp_d() {
COMPREPLY=( $(
if [ "$COMP_CWORD" -eq 1 ]; then
compgen -W "exempt limit show update" "$2"
fi
) )
}
$ complete -F comp_d d
이러한 함수는 완성 후보를 배열로 반환해야 합니다 COMPREPLY
. 사용자가 첫 번째 매개변수(1)를 완성한 COMP_CWORD
경우에만 단어 목록을 사용하고 , 그렇지 않으면 배열이 비어 있습니다.