49 lines
974 B
Go
49 lines
974 B
Go
//go:build unix
|
|
|
|
// Copyright (c) 2024 Celestino Amoroso (celestino.amoroso@gmail.com).
|
|
// All rights reserved.
|
|
|
|
// utils-unix.go
|
|
package expr
|
|
|
|
import (
|
|
"os"
|
|
"os/user"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
func ExpandPath(sourcePath string) (expandedPath string, err error) {
|
|
for expandedPath = os.ExpandEnv(sourcePath); expandedPath != sourcePath; expandedPath = os.ExpandEnv(sourcePath) {
|
|
sourcePath = expandedPath
|
|
}
|
|
|
|
if strings.HasPrefix(sourcePath, "~") {
|
|
var home, userName, remainder string
|
|
|
|
slashPos := strings.IndexRune(sourcePath, '/')
|
|
if slashPos > 0 {
|
|
userName = sourcePath[1:slashPos]
|
|
remainder = sourcePath[slashPos:]
|
|
} else {
|
|
userName = sourcePath[1:]
|
|
}
|
|
|
|
if len(userName) == 0 {
|
|
home, err = os.UserHomeDir()
|
|
if err != nil {
|
|
return
|
|
}
|
|
} else {
|
|
var userInfo *user.User
|
|
userInfo, err = user.Lookup(userName)
|
|
if err != nil {
|
|
return
|
|
}
|
|
home = userInfo.HomeDir
|
|
}
|
|
expandedPath = path.Join(home, remainder)
|
|
}
|
|
return
|
|
}
|