使用 compgen 自动完成文件名

使用 compgen 自动完成文件名

作为我正在编写的更大自动完成函数的一部分,我想使用 compgen 生成文件列表。我阅读了compgen和 的bash 手册条目complete,从那里我认为该选项-G "*"将是解决方案。但我无法让它工作:无论我的输入如何,都会显示当前目录中的文件列表,即:

$ cmd <Tab>
aa bb cc
$ cmd a<Tab>
aa bb cc
$ cmd aa<Tab>
aa bb cc

因此,我尝试使用 来调试它complete,它支持与 compgen 相同的选项,但我得到了相同的结果:

$ complete -G "*" cmd
$ cmd a<Tab>
aa bb cc

我也尝试过complete -o filenames,但这也不起作用..

答案1

我自己找到了答案:我必须使用以下-A action选项:

compgen -o filenames -A file ...
complete -o filenames -A file

答案2

或者,您可以使用文件名的默认自动完成功能

# at the top of the function to disable default
compopt +o default

# and where you need filename completion, re-enable it and send empty COMPREPLY
compopt -o default
COMPREPLY=()
return 0

基于https://stackoverflow.com/a/19062943/1817610

相关内容