如何定义函数名 "pattern" 的补全?

How to define completion for function name "pattern"?

我有几个函数只与目录一起工作,所有函数名称都遵循这种模式(以 _dir 结尾):

something_dir () { ... }
something_else_dir() { ... }
...

对于所有这些,我将完成定义为:

complete -A directory something_dir something_else_dir ...

是否可以自动定义所有函数的完成,以便每个以 _dir 结尾的新函数只完成目录?

使用compgen -A function列出所有函数;然后 grep -E '.*_dir$' 过滤掉以 _dir.

结尾的函数
complete -A directory $(compgen -A function | grep -E '.*dir$')

这假定所有以 _dir 结尾的函数名称都没有特殊符号,如 * 和空格。根据,应该一直都是这样。

此命令只会为已经存在的函数设置完成。要为您将在交互式会话中定义的函数自动添加补全,请将命令添加到 PROMPT_COMMAND 以便在每次提示时执行。

PROMPT_COMMAND="complete -A directory $(compgen -A function | grep -E '.*dir$')"