2009-10-27 51 views
28

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

我将它们作为Mac安装包中的安装后脚本运行,它们在那里被自动sudo-ed,但我需要使用用户名进行操作。

$ HOME是正确的,但。这种不雅的方法是从家乡路径中提取名字,但我想知道是否有一种自然的方式来做到这一点。

我不能影响脚本被调用的方式,因为它是安装程序中的自动调用。

回答

30

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

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

+1

对于那些在这里登陆,因为gnome-terminal放弃了对'logname'的支持,这似乎很好''(logname 2>/dev/null || echo $ SUDO_USER)''。也在MacOS上测试过。错误报告:https://bugzilla.gnome.org/show_bug.cgi?id = 747046 – tresf

9

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

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

这绝不是完美的,但你可以使用test -w ~root && echo I have write access to ~root

15

您可以使用$(logname),即使您正在进行sudoing,它也会返回您的登录名。

+5

未来的谷歌搜索引擎;这应该是公认的答案,它适用于OSX,Debian和Centos。 – Knetic

+2

@Knetic对于未来您和其他Google员工,它可能不会:https://bugzilla.gnome.org/show_bug.cgi?id=747046 – muru

+0

它在Ubuntu 16.04.1上返回sudo名称LTS – Adnan