Bash 参数补全
2.0 新版功能.
Click 2.0 中的任何 Click 脚本都支持 Bash 参数补全。在完成这项工作时,会有一些限制,但大多数情况下,它是可以正常工作的。
限制
只有当脚本正确安装时,才可以使用 Bash 参数补全,而不是通过 python
命令执行。如何做到这一点,参见 Setuptools 集成。此外,Click 目前只支持 Bash 参数补全。
目前,Bash 参数补全是一个无法修改的内部特性。可能未来的版本会有更多的选择。
它能补全什么
一般,Bash 参数补全支持补全子命令和参数。子命令随时都可以被补全出来,而参数只有在提供一个 - 符号后才可以进行补全。比如:
- $ repo <TAB><TAB>
- clone commit copy delete setuser
- $ repo clone -<TAB><TAB>
- --deep --help --rev --shallow -r
激活
为了激活 Bash 补全功能,你需要通知 Bash 你的脚本可以使用补全和如何使用补全。任何 Click 程序都会自动完成这个工作。一般情况下这项功能通过一个神奇的环境变量 <PROGNAME>COMPLETE
来工作,其中 <PROG_NAME>
是你的以 分割的大写的可执行程序的名称。
如果你的工具叫做 foo-bar
, 那么这个神奇的变量应该叫做 _FOO_BAR_COMPLETE
。通过使用 source
将工具名导出,它将吐出可以被激活的激活脚本。
比如说,为 foo-bar
脚本开启 Bash 补全功能,你需要将下列命令放入到 .bashrc
:
- eval "$(_FOO_BAR_COMPLETE=source foo-bar)"
从此以后,你的脚本将启用 Bash 补全功能。
激活脚本
上述的激活示例总是在启动时调用你的应用程序。如果你有很多的此类应用程序这将会大大增加你的 shell 记过时间。另一个选择是你可以将上述生成的内容通过一个文件发送,这也是 Git 和其他系统正在做的事情。
通过下列方式简单地实现:
- _FOO_BAR_COMPLETE=source foo-bar > foo-bar-complete.sh
然后将下列命令放入你的 bashrc 中取代之前的命令:
- . /path/to/foo-bar-complete.sh