package cmd import ( "bufio" "fmt" "os" "strings" ) func LoadEnvFile(path string) error { f, err := os.Open(path) if err != nil { return err } defer f.Close() scanner := bufio.NewScanner(f) lineNum := 0 for scanner.Scan() { lineNum++ line := strings.TrimSpace(scanner.Text()) if line == "" || strings.HasPrefix(line, "#") { continue } key, val, ok := strings.Cut(line, "=") if !ok { return fmt.Errorf("line %d: expected KEY=VALUE", lineNum) } key = strings.TrimSpace(key) val = strings.TrimSpace(val) if key == "" { return fmt.Errorf("line %d: empty variable name", lineNum) } // Remove matching single or double quotes around the whole value. if len(val) >= 2 { if (val[0] == '"' && val[len(val)-1] == '"') || (val[0] == '\'' && val[len(val)-1] == '\'') { val = val[1 : len(val)-1] } } if err := os.Setenv(key, val); err != nil { return fmt.Errorf("line %d: set %q: %w", lineNum, key, err) } } if err := scanner.Err(); err != nil { return err } return nil }