66 lines
2.0 KiB
Go
66 lines
2.0 KiB
Go
package cmd
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/spf13/cobra"
|
||
"github.com/spf13/viper"
|
||
"os"
|
||
)
|
||
|
||
const WddConfigFilePath = "/usr/local/etc/wdd/"
|
||
|
||
var rootCmd = &cobra.Command{
|
||
Use: "wdd",
|
||
Short: "wdd应用程序是wdd封装的NB工具",
|
||
Long: `使用golang的强大特性,加上wdd的高超技术,\n打造一个方便、高效、适用于各种LINUX系统的瑞士军刀工具\n 尽情享用!`,
|
||
Run: func(cmd *cobra.Command, args []string) {
|
||
// Do Stuff Here
|
||
},
|
||
}
|
||
var cfgFile = ""
|
||
var userLicense = ""
|
||
var projectBase = ""
|
||
|
||
func init() {
|
||
|
||
cobra.OnInitialize(initConfig)
|
||
|
||
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra.yaml)")
|
||
rootCmd.PersistentFlags().StringVarP(&projectBase, "projectbase", "b", "",
|
||
"base project directory eg. github.com/spf13/")
|
||
rootCmd.PersistentFlags().StringP("author", "a", "YOUR NAME", "Author name for copyright attribution")
|
||
rootCmd.PersistentFlags().StringVarP(&userLicense, "license", "l", "", "Name of license for the project (can provide `licensetext` in config)")
|
||
rootCmd.PersistentFlags().Bool("viper", true, "Use Viper for configuration")
|
||
viper.BindPFlag("author", rootCmd.PersistentFlags().Lookup("author"))
|
||
viper.BindPFlag("projectbase", rootCmd.PersistentFlags().Lookup("projectbase"))
|
||
viper.BindPFlag("useViper", rootCmd.PersistentFlags().Lookup("viper"))
|
||
viper.SetDefault("author", "Esdeath Wang(zeaslity@gamil.com)")
|
||
viper.SetDefault("license", "apache")
|
||
}
|
||
|
||
func initConfig() {
|
||
// Don't forget to read config either from cfgFile or from home directory!
|
||
if cfgFile != "" {
|
||
// Use config file from the flag.
|
||
viper.SetConfigFile(cfgFile)
|
||
} else {
|
||
|
||
// Search config in home directory with name ".cobra" (without extension).
|
||
viper.AddConfigPath(WddConfigFilePath)
|
||
viper.SetConfigName(".cobra")
|
||
}
|
||
|
||
if err := viper.ReadInConfig(); err != nil {
|
||
fmt.Println("Can't read config:", err)
|
||
os.Exit(1)
|
||
}
|
||
}
|
||
|
||
func Execute() {
|
||
|
||
if err := rootCmd.Execute(); err != nil {
|
||
fmt.Println(err)
|
||
os.Exit(1)
|
||
}
|
||
}
|