【问题标题】:How to define completion for function name "pattern"?如何定义函数名称“模式”的完成?
【发布时间】:2018-07-11 09:22:15
【问题描述】:

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

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

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

complete -A directory something_dir something_else_dir ...

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

【问题讨论】:

  • 我的一个想法是定义一个函数(与complete -F myfunc 一起应用),该函数将查看其第一个参数以确定是否以_dir 结尾。但是,我不确定如何确保该函数应用于 all 命令(而不仅仅是没有预定义完成的命令),以及如何在命令名称执行 时返回预期的完成不_dir结尾。

标签: bash bash-completion


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 这是个好主意。虽然,它不会自动适用于我之后添加的新功能。但我想这甚至是不可能的。
  • @mickp PROMPT_COMMAND 是可能的。我编辑了我的答案。
猜你喜欢
  • 2011-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2014-06-11
  • 1970-01-01
相关资源
最近更新 更多