2013-05-03 4 views
1

스크립트 내의 고정 디렉토리에서 bash 탭 완성을 사용하려면 어떻게해야합니까? pdf 파일이 포함 된 ~/pdf 디렉토리가 있다고 가정합니다. 이러한 파일을 볼 수있는 간단한 스크립트를 만들고 싶습니다. viewpdf :고정 된 디렉토리의 Bash 탭 완성 파일

#! /bin/bash 

evince $1 

하자 내가 디렉토리 ~/foo/bar에서 오전 viewpdf ~/pdf/test.pdf, 나는 다음 파일을 볼 수 있습니다 쓰기 말한다. 그러나 ~/pdf 디렉토리에서 bash 탭 완성을 사용하고자하므로 viewpdf t<tab><tab> 같은 결과가 생성됩니다. 어떻게 할 수 있습니까?

1 근사치로
+1

http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2 – Kevin

+1

그래서 당신은 본질적으로 자동 완성 결과에'~/pdf'를 앞에두고 싶습니까? 고급 bash 스크립팅 가이드의 [프로그래밍 할 수있는 개론 (Introduction to Programmable Completion)] (http://tldp.org/LDP/abs/html/tabexpansion.html) 섹션은 좋은 참고 자료입니다. –

답변

3

, '당신은 다음

_cmd() { COMPREPLY=($(ls ~/pdf/*.pdf)); }  
complete -F _cmd viewpdf 

소스에게 그것을 시도 할 수 있습니다 당신은 jm666을 바탕으로 당신이 간단한 PDF 경쟁을 원하는 경우

viewpdf <tab> #and will get the list of pdf files from the ~/pdf 

,

complete -f -X '!*[email protected](pdf|PDF)' viewpdf 
+0

감사합니다. 그러나 여러 개의 100 개의 pdf 파일이 있으므로 목록에 표시하고 싶지 않습니다. 그냥 처음 세 글자를 입력하고 을 눌러 이름을 완성합니다. –

+0

지금 글자를 입력하면 을 누르면 글자가 지워집니다. –

1

사용할 수 있습니다 제안 및 링크가 제공하는 Kevin 이제는 lowing 코드가 작동 : 작동하지 않습니다

_cmd() { 
    local cur files 
    COMPREPLY=() 
    cur="${COMP_WORDS[COMP_CWORD]}" 
    files=$(ls ~/pdf/) 
    COMPREPLY=($(compgen -W "${files}" -- ${cur})) 
} 

ls ~/pdf/*.pdf된다는 사실을 각 파일의 파일 이름을 경로명이 아닌 확장되어 있기 때문에 ..

관련 문제