带有sudo的os.UserHomeDir返回/ root

问题描述

我正在运行一个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