compgen을 사용하여 파일 이름 자동 완성

compgen을 사용하여 파일 이름 자동 완성

내가 작성 중인 더 큰 자동 완성 기능의 일부로 compgen을 사용하여 파일 목록을 생성하고 싶습니다. 나는 compgenbash 매뉴얼 항목을 읽었고 complete거기에서 그 옵션이 -G "*"해결책이 될 것이라고 생각했습니다. 하지만 작동시킬 수 없습니다. 입력 내용이 무엇이든 현재 디렉터리의 파일 목록이 표시됩니다. 예:

$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc

그래서 compgen과 동일한 옵션을 지원하는 를 사용하여 디버깅을 시도했지만 complete동일한 결과를 얻었습니다.

$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc

저도 해봤는데 complete -o filenames그것도 안되더군요..

답변1

나는 스스로 답을 찾았습니다. 나는 다음 옵션을 사용해야 했습니다 -A action:

compgen -o filenames -A file ...
complete -o filenames -A file

답변2

또는 파일 이름에 대한 기본 자동 완성을 사용할 수 있습니다.

# at the top of the function to disable default
compopt +o default

# and where you need filename completion, re-enable it and send empty COMPREPLY
compopt -o default
COMPREPLY=()
return 0

기반으로https://stackoverflow.com/a/19062943/1817610

관련 정보