我正在尝试编写一个忽略以*.bak
结尾的文件名以及名为backup
的目录的完成函数。除此之外,它应该像默认的Readline完成一样工作(例如用于ls
命令的那个)。这是我的第一次尝试:
$ cat setup.sh
_compTest() {
local cur
FIGNORE='bak:backup'
cur="${COMP_WORDS[$COMP_CWORD]}"
compopt -o filenames
COMPREPLY=( $(compgen -f "$cur") )
}
complete -F _compTest aaa
采购后:
$ . setup.sh
我可以输入
$ aaa <tab><tab>
我得到一个不包含*.bak
个文件的完成列表,但遗憾的是不是backup
个目录。
如何扩展此功能以从完成列表中排除backup
目录?
答案 0 :(得分:0)
这可以通过对compgen
:
_compTest() {
local cur words
cur="${COMP_WORDS[$COMP_CWORD]}"
compopt -o filenames
words=( $(compgen -f "$cur") )
COMPREPLY=()
for val in "${words[@]}" ; do
name=$(basename "$val")
if [[ $name == *.bak || $name == "backup" ]] ; then
continue
fi
COMPREPLY+=( "$val" )
done
}