//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 }