コブラを使用して CLI コマンド ツールを作成します。エラー処理以外はすべて問題ないようです
コマンドが誤って送信された場合(間違った引数または間違った入力)、std.outの代わりにstd.errを返すようにしたい
シナリオを簡素化するために、これを作成しました。これは私のユースケースを示しています
package main
import (
"errors"
"fmt"
"os"
"github.com/spf13/cobra"
)
var (
RootCmd = &cobra.Command{
Use: "myApp",
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf("ROOT verbose = %d, args = %v\n", args)
},
}
provideCmd = &cobra.Command{
Use: "provide",
Run: nil,
}
appCmd = &cobra.Command{
Use: "apps",
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
if name != "myapp" {
err := errors.New("app name doesnt exist")
return err
}
return nil
},
SilenceUsage: true,
}
)
func init() {
// Add the application command to app command
provideCmd.AddCommand(appCmd)
// add provide command to root command
RootCmd.AddCommand(provideCmd)
}
func main() {
if err := RootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(-1)
}
}
バイナリをコンパイルしてバイナリexec.Command
に対して実行すると、すべてが期待どおりに機能します。しかし、エラーシナリオをテストしたい場合は、 at ではなくmycli provide apps apps1
in に返されることを確認したいstd.err
std.out
私が実行すると、mycli provide apps myapp
すべてがOKになるはずです
しかし、実行するmycli provide apps myapp2
と std.out ではなく std.err を取得したいのですが、ここではそうではありません...ここで何が欠けていますか?