2

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

#! /bin/bash

evince $1

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

4

2 回答 2

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
于 2013-05-03T20:04:13.270 回答
3

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

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

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

于 2013-05-04T07:19:52.090 回答