如何定义函数名称“模式”的完成?

时间:2018-07-11 09:22:15

标签: bash bash-completion

我有几个仅适用于目录的函数,所有函数名称都遵循此模式(以 _dir 结尾):

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

对于所有这些,我用以下命令定义完成:

complete -A directory something_dir something_else_dir ...

是否可以自动定义所有功能的完成方式,以便每个以 _dir 结尾的新功能仅完成目录?

1 个答案:

答案 0 :(得分:2)

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

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

这假定所有以_dir结尾的函数名都不含特殊符号,例如*和空格。根据{{​​3}},情况应该总是如此。

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

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