【发布时间】:2014-11-05 14:32:03
【问题描述】:
我想要一个以编程方式从 bash 或 zsh 返回完成选项的函数。 stackoverflow 上有很多examples of related questions,但在任何地方都没有适当的通用答案。我不想知道如何为 bash 编写特定的完成函数。
我已经尝试通过阅读 debian /etc/completion shell 代码、将选项卡的控制代码回显到“bash -i”来实现这一点,甚至尝试使用与 python-pexpect 的自动子进程交互。每次我认为自己成功时,我都会发现一些小问题使整个解决方案无效。 我会接受任何语言的解决方案,但最好是 python。显然,确切的输入输出会因系统而异,但请看下面的示例 I/O:
- function("git lo") 返回 ["log","lol","lola"]
- function("apt-get inst") 返回 ["apt-get install"]
- function("apt-get") 返回 []
- function("apt-get ") 返回 ["apt-get autoclean","apt-get autoremove", ...]
- 函数 ("./setup") 返回 ["./setup.py"]
如果您正在考虑用 shell 编写的解决方案,理想情况下我可以在没有“源代码”的情况下执行它。例如 bash "compgen" 命令看起来很有趣(尝试 "compgen -F _git"),但请注意 "bash -c 'compgen -F _git'" 不起作用,因为完成帮助程序 "_git" 不在范围内。
【问题讨论】:
-
在
bash中,完成由readline处理,我将从man bash中的READLINE部分开始,也许深入研究它的源代码... Ciao from跨度>