summaryrefslogtreecommitdiffstats
path: root/golib
diff options
context:
space:
mode:
authorSebastien Douheret <sebastien.douheret@iot.bzh>2017-09-22 15:39:41 +0200
committerSebastien Douheret <sebastien.douheret@iot.bzh>2017-09-22 15:39:41 +0200
commit59a1e17527c91c1cddc344ec4273a905336eecdd (patch)
tree502f08064eaf58a68ea0a33f5c513b1d729be058 /golib
parent4b8e35b6786b614c11feb99232d0d39c1eb23f32 (diff)
Added ${EXEPATH} support to ResolveEnvVar.
Diffstat (limited to 'golib')
-rw-r--r--golib/filepath.go35
1 files changed, 27 insertions, 8 deletions
diff --git a/golib/filepath.go b/golib/filepath.go
index 476096c..b27ac6f 100644
--- a/golib/filepath.go
+++ b/golib/filepath.go
@@ -52,15 +52,34 @@ func ResolveEnvVar(s string) (string, error) {
vars := re.FindAllStringSubmatch(s, -1)
res := s
for _, v := range vars {
- val := os.Getenv(v[1])
- if val == "" {
- // Specific case to resolved $HOME or ${HOME} on Windows host
- if runtime.GOOS == "windows" && v[1] == "HOME" {
- if usr, err := user.Current(); err == nil {
- val = usr.HomeDir
+ val := ""
+ if v[1] == "EXEPATH" {
+ // Specific case to resolve $EXEPATH or ${EXEPATH} used as current executable path
+ exePath := os.Args[0]
+ ee, _ := os.Executable()
+ exeAbsPath, err := filepath.Abs(ee)
+ if err == nil {
+ exePath, err = filepath.EvalSymlinks(exeAbsPath)
+ if err == nil {
+ exePath = filepath.Dir(ee)
+ } else {
+ exePath = filepath.Dir(exeAbsPath)
+ }
+ }
+ val = exePath
+
+ } else {
+ // Get env var value
+ val = os.Getenv(v[1])
+ if val == "" {
+ // Specific case to resolved $HOME or ${HOME} on Windows host
+ if runtime.GOOS == "windows" && v[1] == "HOME" {
+ if usr, err := user.Current(); err == nil {
+ val = usr.HomeDir
+ }
+ } else {
+ return res, fmt.Errorf("ERROR: %s env variable not defined", v[1])
}
- } else {
- return res, fmt.Errorf("ERROR: %s env variable not defined", v[1])
}
}