44

如果我使用 sudo 运行 shell 脚本,如何获得正确的 $USER ?

我在 Mac 安装包中将它们作为安装后脚本运行,它们会自动被 sudo 编辑,但我需要用用户名做一些事情。

不过,$HOME 是正确的。不优雅的方法是从主路径中提取名称,但我想知道是否有一种自然的方法可以做到这一点。

我无法影响调用脚本的方式,因为它是安装程序内部的自动调用。

4

4 回答 4

43

在我的系统上,该变量$SUDO_USER设置为调用者的用户名。

您不应该${HOME}直接从变量中提取用户名。它正在配置而不是计算。要提取用户名,您可以查看/etc/passwd文件,但这非常依赖于系统,例如有时您必须查看 LDAP 目录或条目通过 NIS 传播......

于 2009-10-27T09:25:36.073 回答
28

You can use $(logname), which returns your login name even if you are currently sudoing.

于 2015-02-12T13:38:35.893 回答
19

检查变量SUDO_USER

http://www.gratisoft.us/sudo/man/sudo.html#environment

另一种获取用户的方法是通过who命令。当您不关心用户是否有 sudo 时,这有时很有用。

who -m | awk '{print $1;}'
于 2009-10-27T09:27:18.363 回答
9

SUDO_USER不便携。它在 Fedora 17 上未设置。

$USER$UID变量在调用 sudo 时也是不可预测的。一些发行版报告 sudoer,其他发行版报告 root 用户。

It's by no means perfect, but you could use test -w ~root && echo I have write access to ~root.

于 2012-11-02T05:14:40.897 回答