github.com/sagernet/sing-box@v1.2.7/cmd/sing-box/main.go (about) 1 package main 2 3 import ( 4 "os" 5 "time" 6 7 _ "github.com/sagernet/sing-box/include" 8 "github.com/sagernet/sing-box/log" 9 10 "github.com/spf13/cobra" 11 ) 12 13 var ( 14 configPaths []string 15 configDirectories []string 16 workingDir string 17 disableColor bool 18 ) 19 20 var mainCommand = &cobra.Command{ 21 Use: "sing-box", 22 PersistentPreRun: preRun, 23 } 24 25 func init() { 26 mainCommand.PersistentFlags().StringArrayVarP(&configPaths, "config", "c", nil, "set configuration file path") 27 mainCommand.PersistentFlags().StringArrayVarP(&configDirectories, "config-directory", "C", nil, "set configuration directory path") 28 mainCommand.PersistentFlags().StringVarP(&workingDir, "directory", "D", "", "set working directory") 29 mainCommand.PersistentFlags().BoolVarP(&disableColor, "disable-color", "", false, "disable color output") 30 } 31 32 func main() { 33 if err := mainCommand.Execute(); err != nil { 34 log.Fatal(err) 35 } 36 } 37 38 func preRun(cmd *cobra.Command, args []string) { 39 if disableColor { 40 log.SetStdLogger(log.NewFactory(log.Formatter{BaseTime: time.Now(), DisableColors: true}, os.Stderr, nil).Logger()) 41 } 42 if workingDir != "" { 43 _, err := os.Stat(workingDir) 44 if err != nil { 45 os.MkdirAll(workingDir, 0o777) 46 } 47 if err := os.Chdir(workingDir); err != nil { 48 log.Fatal(err) 49 } 50 } 51 if len(configPaths) == 0 && len(configDirectories) == 0 { 52 configPaths = append(configPaths, "config.json") 53 } 54 }