编写简单的 Bash 补全脚本仅需一行。可对于拥有许多复杂参数的命令来说,这就不够用了。开发者需要编写可编程补全脚本。
可是,编写复杂的可编程补全脚本却是一件困难的事。Bash 脚本的语法十分自由(容易出错),教程也五花八门,你可能需要踩很多坑。 即使有 scop/bash-completion 这样现成的补全脚本库,可是它只收录常用命令。对于某些社区不常用的命令,还是得自己手写补全脚本。
为了减少开发者接触 bash 的痛苦时间。我创造了 bash-completor。 bash-completor 是一个用 bash 脚本编写的 Bash 补全脚本生成器。帮助 bash 新手快速地实现 bash 补全。 它用声明式写法来实现逻辑。学习门槛非常低。
可能有人会想,bash 就一胶水语言,不应该用来写这么复杂的功能。为何不用 js 、go 、rust 等高级编程语言来实现补全逻辑? 当然可以,只不过这会引入开发环境配置,依赖部署等问题。 需要使用 bash 补全功能的人一定安装了 bash 。所以用 Bash 脚本来写,不引入其他依赖。用户安装使用就很简单。
下面介绍这个工具。
<cmd> [options] [arguments]
。<cmd> [cmd-options] <subcmd> [subcmd-options] [arguments]
。-o
, --option
, --option <value>
, --option=
, +o
, +option
格式的参数。你可以用 curl 或者 git 安装它。具体请看项目文档,这里不赘述。
以创建 bash-completor 自身的补全脚本为例。
首先,创建配置文件 completor.bash 。 配置文件也是用 bash 语法写的。你只需要懂最基础的 bash 语法即可。
output=dist/bash-completor.completion.bash
authors=('ADoyle ([email protected])')
cmd=bash-completor
cmd_opts=(
-c:@files
-h --help
--version
)
这就是配置的全部内容。然后执行 bash-completor -c ./completor.bash
生成补全脚本。完成。
复杂的例子也可以看这些链接:
更多语法见这个链接。
生成的补全脚本遵循以下代码风格。无需担心重名问题。而且这也便于在运行时调试。
_${cmd}_completions
。_${cmd}_completions_${subcmd}
为前缀命名。_${cmd}_comp_
为前缀命名。_${cmd}_comp_cmd_opts
_${cmd}_comp_subcmd_opts_${subcmd}
为前缀命名。_${cmd}_comp_reply_
为前缀命名。_${cmd}_comp_reply_custom_
为前缀命名。以上介绍完了。如果你觉得不错,可以给文章点给赞,或者给项目点个 star 。