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  }