Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 带有sudo返回/root的os.UserHomeDir()_Go_Command Line Interface - Fatal编程技术网

Go 带有sudo返回/root的os.UserHomeDir()

Go 带有sudo返回/root的os.UserHomeDir(),go,command-line-interface,Go,Command Line Interface,我正在运行一个CLI应用程序,并使用os.UserHomeDir func保存一些文件,它会返回如下内容:/home/victor/.rit,但当我使用sudo运行命令时,它会返回:/root/.rit/,我希望获得相同的地址,无论是否使用sudo,有一种方法可以使用go来实现这一点?它的行为正确:sudo以不同的用户身份运行命令,root的主目录是/root。因此,如果使用sudo以root用户身份运行程序,则当前用户的主目录为/root。如果需要不同的目录,则应将其作为CLI参数接受,例如使

我正在运行一个CLI应用程序,并使用os.UserHomeDir func保存一些文件,它会返回如下内容:/home/victor/.rit,但当我使用sudo运行命令时,它会返回:/root/.rit/,我希望获得相同的地址,无论是否使用sudo,有一种方法可以使用go来实现这一点?

它的行为正确:sudo以不同的用户身份运行命令,root的主目录是/root。因此,如果使用sudo以root用户身份运行程序,则当前用户的主目录为/root。如果需要不同的目录,则应将其作为CLI参数接受,例如使用。

它的行为正常:sudo以不同的用户身份运行命令,root的主目录为/root。因此,如果使用sudo以root用户身份运行程序,则当前用户的主目录为/root。如果您需要不同的目录,则应将其作为CLI参数接受,例如使用。

如果您的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)

如果您的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的主页是/root/。也许您可以使用$home envvar?当我运行sudo echo时,sudo似乎没有改变它$HOME@KevindeBerk这取决于sudoers是如何配置的,并非普遍正确。@KevindeBerk,$HOME是在命令执行之前插入的,因此shell执行sudo echo/HOME/user之类的命令。请参阅strace-e execve sudo echo$HOME。这似乎是预期的行为。如果您使用sudo运行应用程序,它将以root权限运行,root的主页是/root/。也许您可以使用$home envvar?当我运行sudo echo时,sudo似乎没有改变它$HOME@KevindeBerk这取决于sudoers是如何配置的,并非普遍正确。@KevindeBerk,$HOME是在命令执行之前插入的,因此shell执行sudo echo/HOME/user之类的命令。请参阅strace-e execve sudo echo$HOME。您可能需要使用类似os的检查来验证您是否处于sudo模式。Getuid==0您可能需要使用类似os.Getuid==0的检查来验证您是否处于sudo模式