如何在脚本中的固定目录上使用 bash 选项卡完成?假设我有一个~/pdf
包含 pdf 文件的目录。我想制作一个简单的脚本来查看这些文件,例如viewpdf
:
#! /bin/bash
evince $1
假设我在目录中~/foo/bar
并写入viewpdf ~/pdf/test.pdf
,然后我可以查看文件。但是,我想在~/pdf
目录上使用 bash 选项卡完成,这样viewpdf t
<tab><tab>
会产生相同的结果。如何才能做到这一点?
如何在脚本中的固定目录上使用 bash 选项卡完成?假设我有一个~/pdf
包含 pdf 文件的目录。我想制作一个简单的脚本来查看这些文件,例如viewpdf
:
#! /bin/bash
evince $1
假设我在目录中~/foo/bar
并写入viewpdf ~/pdf/test.pdf
,然后我可以查看文件。但是,我想在~/pdf
目录上使用 bash 选项卡完成,这样viewpdf t
<tab><tab>
会产生相同的结果。如何才能做到这一点?
作为第一个近似值,您可以尝试下一个
_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
根据jm666
的建议和提供的链接,Kevin
我现在可以使用以下代码:
_cmd() {
local cur files
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
files=$(ls ~/pdf/)
COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
}
请注意,这ls ~/pdf/*.pdf
不起作用,因为它扩展为路径名而不是每个文件的文件名..