define
사전에서 단어 정의를 가져오는 사용자 정의 명령이 있습니다 . 에 있는 단어 목록을 사용하여 정의하려는 단어를 완성하는 자동 완성 스크립트를 만들고 싶습니다 /usr/share/dict/words
. 이것이 내가 지금까지 가지고 있는 것입니다:
자동 완성 스크립트: /etc/bash_completion.d/define
_define()
{
dict='/usr/share/dict/words'
cur=${COMP_WORDS[COMP_CWORD]}
regex="^$cur*"
words=$(grep $regex $dict)
if [[ $cur != -* ]]
then
COMPREPLY=( $( compgen -W "$(echo $words)" $cur) )
else
COMPREPLY=()
fi
return 0
}
complete -F _define define
클릭하면 [tab][tab]
내가 입력한 단어로 시작하는 단어 목록이 표시되는 경우도 있고 마지막 문자만 제거되는 경우도 있습니다. 예를 들어, 이렇게 하면 define wall [tab][tab]
가 표시되지만 define wal
, 이렇게 하면 define wal [tab][tab]
단어 목록이 표시됩니다.
왜 이런 일이 발생합니까?
답변1
문제는 완성 단어 목록의 작은따옴표 문자와 관련된 것으로 밝혀졌으며 명령의 정규식을 다음에서 다음으로 변경하여 문제를 해결 '
했습니다 .grep
^$cur*
^$cur[^']*$
_define()
{
local dict='/usr/share/dict/words'
local cur=${COMP_WORDS[COMP_CWORD]}
local regex="^$cur[^']*$"
if [[ $cur == -* ]]
then
COMPREPLY=()
else
local WORDS="$( grep "$regex" $dict )"
COMPREPLY=( $(compgen -W "${WORDS}" -- $cur) )
fi
}
complete -F _define define