github.com/jerryclinesmith/packer@v0.3.7/configfile_unix.go (about) 1 // +build darwin freebsd linux netbsd openbsd 2 3 package main 4 5 import ( 6 "bytes" 7 "errors" 8 "log" 9 "os" 10 "os/exec" 11 "path/filepath" 12 "strings" 13 ) 14 15 func configFile() (string, error) { 16 dir, err := configDir() 17 if err != nil { 18 return "", err 19 } 20 21 return filepath.Join(dir, ".packerconfig"), nil 22 } 23 24 func configDir() (string, error) { 25 // First prefer the HOME environmental variable 26 if home := os.Getenv("HOME"); home != "" { 27 log.Printf("Detected home directory from env var: %s", home) 28 return home, nil 29 } 30 31 // If that fails, try the shell 32 var stdout bytes.Buffer 33 cmd := exec.Command("sh", "-c", "eval echo ~$USER") 34 cmd.Stdout = &stdout 35 if err := cmd.Run(); err != nil { 36 return "", err 37 } 38 39 result := strings.TrimSpace(stdout.String()) 40 if result == "" { 41 return "", errors.New("blank output") 42 } 43 44 return result, nil 45 }