我有几个仅适用于目录的函数,所有函数名称都遵循此模式(以 _dir 结尾):
something_dir () { ... }
something_else_dir() { ... }
...
对于所有这些,我用以下命令定义完成:
complete -A directory something_dir something_else_dir ...
是否可以自动定义所有功能的完成方式,以便每个以 _dir 结尾的新功能仅完成目录?
答案 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$')"