如何在脚本中的固定目录上使用bash选项卡完成?假设我有一个包含pdf文件的目录~/pdf
。我想制作一个简单的脚本来查看这些文件,例如viewpdf
:
#! /bin/bash
evince $1
假设我在目录~/foo/bar
并写viewpdf ~/pdf/test.pdf
,然后我可以查看该文件。但是,我想在~/pdf
目录上使用bash选项卡完成,这样viewpdf t
<tab><tab>
将产生相同的结果。怎么办呢?
答案 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
不起作用,因为它扩展为路径名而不是每个文件的文件名。