在golang的flag中添加bash completion (補完)功能
要在Golang中接收命令行参数,基本方法是使用标准的flag包。通常我会使用kingpin,它会默认内置Bash/ZSH Shell自动完成功能,但是flag包中并没有这个功能。
实际上,在flag上添加bash完成(命令补全)可能并没有太多优点,但这也是我为了练习golang和bash而制作的。
目标
我要介绍一个名为flagcmpl的工具,它可以向flag包添加bash自动补全功能。
- https://github.com/sago35/flagcmpl
使用方法 (shǐ fǎ)
突然来了,使用方法。
-
- 增加 “github.com/sago35/flagcmpl” 的导入
将使用 flag.Parse() 的部分改为 flagcmpl.Parse()
在 bash_profile 等文件中执行 eval “$(your-cli-tool –completion-script-bash)”
将flagcmpl.Parse()改写为flagcmpl.解析()
首先,将希望进行bash自动补全的Golang源代码中的flag.Parse()替换为flagcmpl.Parse()。
package main
import "flag"
import "github.com/sago35/flagcmpl"
var verbose = flag.Bool("verbose", false, "Verbose mode.")
func main() {
// flag.Parse() を↓に書き換える
flagcmpl.Parse()
}
如果您想补充完整的golang源代码,而它使用了flag.FlagSet(),则可以按以下方式进行修改。
package main
import (
"flag"
"github.com/sago35/flagcmpl"
"os"
)
func main() {
flags := flag.NewFlagSet("sample2", flag.ExitOnError)
flags.Bool("verbose", false, "Verbose mode.")
// flags.Parse(os.Args[1:]) を↓に書き換える
flagcmpl.ParseFlagSet(os.Args[0], flags, os.Args)
}
在Bash中添加自动补全功能
如果您正在使用your-cli-tool创建东西,请执行 “eval “$(your-cli-tool –completion-script-bash)””。
展示
Windows上使用git bash的演示在这里。

这里是用于Demo的源代码。
- https://github.com/sago35/flagcmpl/tree/master/sample3
整理
只需简单地将Bash自动补全功能添加到以上提到的内容中。
链接等
-
- sago35/flagcmpl: A Go library to add bash completion to your cli-tool using flag
-
- alecthomas/kingpin: A Go (golang) command line and flag parser
-
- gif作成にはScreenToGifを使いました
NickeManarin/ScreenToGif: ScreenToGif allows you to record a selected area of your screen and save it as a gif or video.