コマンドラインオプションをflagでパースしたとき-hを指定するとexit status2と出てしまう
どういうこと
golangではコマンドラインオプションをflagパッケージを使ってパースすることができる。
しかし、オプションに-h
、--help
を指定すると、以下のようにexit status2
と出てしまう。
なぜこんな仕様なのか...
$ go run flagSample.go -h Usage: -n int number to use (default 1234) exit status 2
これを出ないようにしたい。
対応策
flag.Usage
を使ってUsageを表示するときに動かす関数を指定してあげ、その関数内で os.exit(0)
を呼ぶと-h
、--help
を指定したときの statusコードは0となり、exit status2
は出なくなる。以下にコード例を示す。
コード
これは、-n
で指定した数字を表示するだけのコマンドラインツールのコードである。flag.Usage
で指定したUsage()
内でos.exit(0)
を呼んでいるので、exit status2
は出ない。
package main import ( "flag" "fmt" "os" ) var number int func usage() { fmt.Println("Usage:") flag.PrintDefaults() os.Exit(0) } func init() { const defaultNumber = 1234 flag.IntVar(&number, "n", defaultNumber, "number to use") flag.Usage = func() { usage() } } func main() { flag.Usage = func() { usage() } flag.Parse() fmt.Println("flag test") fmt.Printf("Number: %d\n", number) }
実行結果
$ go run flagSample.go -n 6666 flag test Number: 6666 $ go run flagSample.go -h Usage: -n int number to use (default 1234)