golang flag에 bash completion (완성) 추가

golang에서 명령줄 인수를 받으려면 표준 플래그 패키지를 사용하는 것이 기본입니다.
평소에는 kingpin을 사용하고 있기 때문에 Bash/ZSH Shell Completion가 표준으로 내장되어 있지만, flag에는 그것이 없습니다.

실제로 flag에 bash completion (명령 보완)을 추가한 곳에서 그다지 장점은 없을지도 모르지만 golang과 bash의 연습도 일찍 만들어 보았습니다.

Goal



flag 패키지에 bash completion을 추가하는 flagcmpl을 소개한다.
  • htps : // 기주 b. 코m/사고 35/fぁgcmpl

  • 사용법



    갑작스럽지만 사용법.
  • import "github.com/sago35/flagcmpl" 추가
  • flag.Parse()를 사용하는 위치를 flagcmpl.Parse()
  • bash_profile 등으로 eval "$(your-cli-tool --completion-script-bash)" 실행

  • flagcmpl.Parse() 로 다시 쓰기



    우선, bash completion하고 싶은 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)"를 실행하십시오.

    하지만



    git for windows bash에서 Demo는 여기.



    Demo에 사용한 소스는 이쪽.
  • htps : // 기주 b. 코 m / 사고 35 / f ぁ gcmpl / t 네 /

  • 요약



    위와 같이 쉽게 bash completion을 추가 할 수있었습니다.

    링크 등


  • 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.

  • 좋은 웹페이지 즐겨찾기