gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:43 27 4
gpt4 key购买 nike

我想要一个以编程方式从 bash 或 zsh 返回完成选项的函数。有很多examples of related questions在 stackoverflow 上,但在任何地方都没有正确的、通用的答案。我不想知道如何为 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 编写的解决方案,那么理想情况下,我可以在不使用“source”的情况下执行该解决方案。例如,bash“compgen”命令看起来很有趣(尝试“compgen -F _git”),但请注意“bash -c 'compgen -F _git'”不起作用,因为完成帮助程序“_git”不在范围内。

最佳答案

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

关于python - 以编程方式获取 bash 完成选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26759698/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com