github.com/secoba/wails/v2@v2.6.4/internal/shell/env.go (about) 1 package shell 2 3 import ( 4 "fmt" 5 "strings" 6 ) 7 8 func UpsertEnv(env []string, key string, update func(v string) string) []string { 9 newEnv := make([]string, len(env), len(env)+1) 10 found := false 11 for i := range env { 12 if strings.HasPrefix(env[i], key+"=") { 13 eqIndex := strings.Index(env[i], "=") 14 val := env[i][eqIndex+1:] 15 newEnv[i] = fmt.Sprintf("%s=%v", key, update(val)) 16 found = true 17 continue 18 } 19 newEnv[i] = env[i] 20 } 21 if !found { 22 newEnv = append(newEnv, fmt.Sprintf("%s=%v", key, update(""))) 23 } 24 return newEnv 25 } 26 27 func RemoveEnv(env []string, key string) []string { 28 newEnv := make([]string, 0, len(env)) 29 for _, e := range env { 30 if strings.HasPrefix(e, key+"=") { 31 continue 32 } 33 newEnv = append(newEnv, e) 34 } 35 return newEnv 36 } 37 38 func SetEnv(env []string, key string, value string) []string { 39 return UpsertEnv(env, key, func(_ string) string { return value }) 40 }