bash 완성 스크립트를 설정하려고하는데 문제가 있습니다.
나열된 완성이 특정 확장자와 일치하는 파일 또는 디렉토리 (해당 확장자의 파일을 포함하거나 포함하지 않을 수 있음)가되도록 설정하고 싶습니다.
내가 겪고있는 문제는 파일 과 디렉토리 를 포함하는 완성을 얻을 수있는 유일한 방법 은과 같은 것을 사용하는 것입니다 -o plusdirs -f -X '!*.txt'
. 그러나 bash가 디렉토리 중 하나를 완료하게하면 끝에 공백이 아니라 삭감.
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
주석 처리 된 모든 줄도 시도했지만 디렉토리를 확장하지는 않습니다.
테스트를 위해 하나의 .txt 파일과 하나의 디렉토리 "dir"이있는 디렉토리 (이 디렉토리에는 .txt 파일이 있지만 아직 중요하지는 않음)에서 이것을 실행했습니다. xyz <TAB>
이 함수를 입력 하면 디렉토리와 .txt 파일이 나열되지만 입력 xyz d<TAB>
하면 xyz dir
"공백"뒤에 공백이있는 것으로 확장됩니다 .