问题描述
我正在运行一个CLI应用程序,并使用os.UserHomeDir
func保存一些文件,它返回如下内容:/home/victor/.rit
,但是当我使用sudo运行命令时,它返回:{{ 1}},无论是否使用sudo,我都希望获得相同的地址,有办法用go吗?
解决方法
如果Go程序必须以sudo
运行,则可以通过以下方式在sudo之前找出原始用户身份:
username := os.Getenv("SUDO_USER")
然后您可以查找其用户信息:
import "os/user"
u,err := user.Lookup(username)
if err != nil {
log.Fatal(err)
}
fmt.Println("user home:",u.HomeDir)
,
它的行为正确:sudo
以其他用户身份运行命令,root
的主目录为/root
。因此,如果您使用sudo
以root身份运行程序,则当前用户的主目录为/root
。如果您要使用其他目录,则应将其作为CLI参数接受,例如使用flag
package。