我希望在参数中也能自动完成我的 python 脚本。
我从来没有真正理解 bash_completion 是如何工作的(对于参数),但是在我深入研究之后我明白了:
第二点尤其不是很好,因为我希望它自动生成。
最好的事情是 shell 在每个选项卡上询问我的程序要完成什么,但我的印象是这实际上不起作用,对吗?
第二个选项可能只是编写一个从 argparse 解析器到正确完成的 shell 函数的转换器。
无耻的自我推销:https://github.com/kislyuk/argcomplete
argcomplete 为 argparse 提供 bash(和 zsh)补全。
Bash“完成”真的很棒。对于用 Python 编写的程序来说很容易......
我认为这正是您想要的:optcomplete:Python 的 Shell Completion Self-Generator。例如,它可以作为 Ubuntu 中的“python-optcomplete”包使用。
您在 python 程序中插入几行,然后用户(一次)运行 bash“完整”程序来告诉 bash 如何完成参数:
complete -F _optcomplete <program>
现在用户已经完成了!默认情况下,它会简单地完成程序选项。请参阅示例,了解如何自定义特定选项的完成方式。它写得很漂亮,并且很容易扩展来处理子命令、备用完成选项等!
更新:
要在 zsh 中完成(对于 optparse 和 argparse),请参阅 genzshcomp 0.3.1:Python 包索引
正如 @englebip 所指出的,对于 Python 2.7 和 3.2 中引入的新
argparse
模块,我们仍然需要类似的东西,因为 optparse
现已弃用。
以下是关于朝这个方向前进的讨论:
另请参阅有关如何完成此操作的背景:argparse(以及已弃用的 optparse)如何响应 bash 中 python 程序名称后面的“tab”按键? - 堆栈溢出