github.com/mikesimons/terraform@v0.6.13-0.20160304043642-f11448c69214/config_unix.go (about) 1 // +build !windows 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 := homeDir() 17 if err != nil { 18 return "", err 19 } 20 21 return filepath.Join(dir, ".terraformrc"), nil 22 } 23 24 func configDir() (string, error) { 25 dir, err := homeDir() 26 if err != nil { 27 return "", err 28 } 29 30 return filepath.Join(dir, ".terraform.d"), nil 31 } 32 33 func homeDir() (string, error) { 34 // First prefer the HOME environmental variable 35 if home := os.Getenv("HOME"); home != "" { 36 log.Printf("[DEBUG] Detected home directory from env var: %s", home) 37 return home, nil 38 } 39 40 // If that fails, try the shell 41 var stdout bytes.Buffer 42 cmd := exec.Command("sh", "-c", "eval echo ~$USER") 43 cmd.Stdout = &stdout 44 if err := cmd.Run(); err != nil { 45 return "", err 46 } 47 48 result := strings.TrimSpace(stdout.String()) 49 if result == "" { 50 return "", errors.New("blank output") 51 } 52 53 return result, nil 54 }