以编程方式获取bash完成选项

时间:2014-11-05 14:32:04

标签: python linux bash shell

我想要一个以编程方式从bash或zsh返回完成选项的函数。 stackoverflow上有很多examples of related questions,但在任何地方都没有适当的通用答案。我不想知道如何为bash编写特定的完成函数。

我已经尝试通过读取debian / etc / completion shell代码,通过将tab的控制代码回显到“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”,...]
  • function(“./ setup”)返回[“./setup.py”]

如果你正在考虑用shell编写的解决方案,那么理想情况下我可以在没有“源”的情况下执行。例如,bash“compgen”命令看起来很有趣(尝试“compgen -F _git”),但请注意“bash -c'compgen -F _git'”不起作用,因为完成帮助程序“_git”不在范围内。

1 个答案:

答案 0 :(得分:0)

到目前为止,{p> This gist是我最好的解决方案。它满足所有要求,适用于多个操作系统的多个版本的bash,但它需要一个子进程调用,而且它太复杂了,这是荒谬的。评论包括所有令人发指的吊索和箭头的完整文件。我仍然希望有更合理的东西出现,但除非它确实如此......这就是它!