특정 디렉터리의 파일만 완료되도록 bash 명령 완성을 어떻게 사용할 수 있나요?

특정 디렉터리의 파일만 완료되도록 bash 명령 완성을 어떻게 사용할 수 있나요?

~/Special 디렉토리에 bash 기능이 specialcat있다고 가정해 보겠습니다.cat

specialcat () {
    cat ~/Special/$1
}

~/Special 디렉터리가 다음과 같이 설정되어 있다고 가정합니다.

mkdir ~/Special
echo This is the first special file > ~/Special/firstfile
echo This is the second special file > ~/Special/secondfile

Specialcat 기능의 사용법은 다음과 같습니다.

> specialcat firstfile
This is the first special file

매개변수 완성을 활성화하고 싶습니다.

> specialcat firstf[TAB]

생산하다

> specialcat firstfile

현재 작업 디렉토리가 무엇인지, 어떤 파일이 있는지는 중요하지 않습니다.

이것이 지금까지의 나의 시도이다

_options_specialcat () {
    COMPREPLY=( $(compgen -W "$(ls ~/Special)") )
}

complete -F _options_specialcat specialcat

이로 인해

> specialcat firstf[TAB]
firstfile   secondfile  
> specialcat firstf

즉, 일부 파일 이름에서 Tab 키를 누르면 파일 목록이 표시되지만 명령이 완료되지는 않습니다.

_options_specialcat원하는 동작을 생성하기 위해 기능을 어떻게 변경할 수 있습니까 ?

답변1

현재 매개변수를 기준으로 목록을 필터링해야 합니다.

COMPREPLY=( $(compgen -W "$(ls ~/Special)" -- "$2") )

관련 정보