我正在尝试设置bash完成脚本并遇到一些麻烦。
我想进行设置,以使列出的补全是与特定扩展名匹配的文件或目录(可能包含该扩展名的文件,也可能不包含该扩展名的文件)。
我遇到的麻烦是,让我包含文件和目录的-o plusdirs -f -X '!*.txt'
补全的唯一方法是使用诸如之类的东西,但是当我让bash完成其中一个目录时,它只是在末尾添加了一个空格,而不是削减。
_xyz()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD-1]}
#COMPREPLY=( $( compgen -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -f -G '*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o filenames -f -X '!*.txt' -- $cur ) )
#COMPREPLY=( $( compgen -o dirnames -f -X '!*.txt' -- $cur ) )
COMPREPLY=( $( compgen -o plusdirs -f -X '!*.txt' -- $cur ) )
return 0
}
complete -F _xyz xyz
我也尝试了所有注释掉的行,但是它们甚至都没有扩展目录。
为了进行测试,我一直在一个包含一个.txt文件和一个目录“ dir”的目录中运行该文件(其中没有.txt文件,尽管这并不重要)。xyz <TAB>
使用此功能键入将列出目录和.txt文件,但是键入xyz d<TAB>
将扩展为xyz dir
(好吧,在“ dir”之后有一个空格)。