Bash选项卡固定目录中的完整文件

时间:2013-05-03 19:34:21

标签: bash tab-completion

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

#! /bin/bash

evince $1

假设我在目录~/foo/bar并写viewpdf ~/pdf/test.pdf,然后我可以查看该文件。但是,我想在~/pdf目录上使用bash选项卡完成,这样viewpdf t <tab><tab>将产生相同的结果。怎么办呢?

2 个答案:

答案 0 :(得分:3)

作为第一个近似值,您可以尝试下一个

_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 '!*.@(pdf|PDF)' viewpdf

答案 1 :(得分:1)

根据jm666的建议和Kevin提供的链接,我现在可以使用以下代码:

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

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