2013-05-03 64 views
1

如何在脚本中的固定目录上使用bash选项卡完成?假设我有一个包含pdf文件的目录~/pdf。我想制作一个简单的脚本来查看这些文件,例如viewpdfBash选项卡在固定目录中完成文件

#! /bin/bash 

evince $1 

让我们说我在目录~/foo/bar,写viewpdf ~/pdf/test.pdf,然后我就可以查看该文件。但是,我想在~/pdf目录中使用bash选项卡完成,因此viewpdf t<tab><tab>会产生相同的结果。如何才能做到这一点?

+1

http://www.debian-administration.org/article/An_introduction_to_bash_completion_part_2 – Kevin 2013-05-03 19:38:55

+1

所以你基本上想把'〜/ pdf'预先添加到自动填充结果中去?高级bash脚本指南的[可编程完成介绍](http://tldp.org/LDP/abs/html/tabexpansion.html)部分是一个很好的参考。 – 2013-05-03 19:39:17

回答

3

为第1近似,你可以尝试下

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

源它,你可以使用

viewpdf <tab> #and will get the list of pdf files from the ~/pdf 
如果你想简单的PDF竞争

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

谢谢,但我有几百个pdf文件,所以我不想列出它们。我只想输入前三个字符,然后按即可完成名称。 – 2013-05-03 20:32:38

+0

如果现在输入字符,当按时,它们将被简单地删除。 – 2013-05-03 20:33:52

1

基于jm666“我的建议和链接提供的Kevin我现在得到了fol降脂代码工作:

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

注意ls ~/pdf/*.pdf不起作用,因为它扩展为路径名,而不是每个文件的文件名..