github.com/wangyougui/gf/v2@v2.6.5/os/gcmd/gcmd.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/wangyougui/gf. 6 // 7 8 // Package gcmd provides console operations, like options/arguments reading and command running. 9 package gcmd 10 11 import ( 12 "os" 13 14 "github.com/wangyougui/gf/v2/container/gvar" 15 "github.com/wangyougui/gf/v2/internal/command" 16 "github.com/wangyougui/gf/v2/internal/utils" 17 "github.com/wangyougui/gf/v2/os/gctx" 18 ) 19 20 const ( 21 CtxKeyParser gctx.StrKey = `CtxKeyParser` 22 CtxKeyCommand gctx.StrKey = `CtxKeyCommand` 23 CtxKeyArguments gctx.StrKey = `CtxKeyArguments` 24 ) 25 26 const ( 27 helpOptionName = "help" 28 helpOptionNameShort = "h" 29 maxLineChars = 120 30 tracingInstrumentName = "github.com/wangyougui/gf/v2/os/gcmd.Command" 31 tagNameName = "name" 32 tagNameShort = "short" 33 ) 34 35 // Init does custom initialization. 36 func Init(args ...string) { 37 command.Init(args...) 38 } 39 40 // GetOpt returns the option value named `name` as gvar.Var. 41 func GetOpt(name string, def ...string) *gvar.Var { 42 if v := command.GetOpt(name, def...); v != "" { 43 return gvar.New(v) 44 } 45 if command.ContainsOpt(name) { 46 return gvar.New("") 47 } 48 return nil 49 } 50 51 // GetOptAll returns all parsed options. 52 func GetOptAll() map[string]string { 53 return command.GetOptAll() 54 } 55 56 // GetArg returns the argument at `index` as gvar.Var. 57 func GetArg(index int, def ...string) *gvar.Var { 58 if v := command.GetArg(index, def...); v != "" { 59 return gvar.New(v) 60 } 61 return nil 62 } 63 64 // GetArgAll returns all parsed arguments. 65 func GetArgAll() []string { 66 return command.GetArgAll() 67 } 68 69 // GetOptWithEnv returns the command line argument of the specified `key`. 70 // If the argument does not exist, then it returns the environment variable with specified `key`. 71 // It returns the default value `def` if none of them exists. 72 // 73 // Fetching Rules: 74 // 1. Command line arguments are in lowercase format, eg: gf.`package name`.<variable name>; 75 // 2. Environment arguments are in uppercase format, eg: GF_`package name`_<variable name>; 76 func GetOptWithEnv(key string, def ...interface{}) *gvar.Var { 77 cmdKey := utils.FormatCmdKey(key) 78 if command.ContainsOpt(cmdKey) { 79 return gvar.New(GetOpt(cmdKey)) 80 } else { 81 envKey := utils.FormatEnvKey(key) 82 if r, ok := os.LookupEnv(envKey); ok { 83 return gvar.New(r) 84 } else { 85 if len(def) > 0 { 86 return gvar.New(def[0]) 87 } 88 } 89 } 90 return nil 91 } 92 93 // BuildOptions builds the options as string. 94 func BuildOptions(m map[string]string, prefix ...string) string { 95 options := "" 96 leadStr := "-" 97 if len(prefix) > 0 { 98 leadStr = prefix[0] 99 } 100 for k, v := range m { 101 if len(options) > 0 { 102 options += " " 103 } 104 options += leadStr + k 105 if v != "" { 106 options += "=" + v 107 } 108 } 109 return options 110 }