首页 > 解决方案 > 如何定义函数名称“模式”的完成?

问题描述

我有几个只使用目录的函数,所有函数名都遵循这种模式(以_dir结尾):

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

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

complete -A directory something_dir something_else_dir ...

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

标签: bashbash-completion

解决方案


用于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$')"

推荐阅读