如果我使用sudo运行shell脚本,如何获得正确的$ USER?
我将它们作为Mac安装包中的安装后脚本运行,它们在那里被自动sudo-ed,但我需要使用用户名进行操作。
$ HOME是正确的,但。这种不雅的方法是从家乡路径中提取名字,但我想知道是否有一种自然的方式来做到这一点。
我不能影响脚本被调用的方式,因为它是安装程序中的自动调用。
如果我使用sudo运行shell脚本,如何获得正确的$ USER?
我将它们作为Mac安装包中的安装后脚本运行,它们在那里被自动sudo-ed,但我需要使用用户名进行操作。
$ HOME是正确的,但。这种不雅的方法是从家乡路径中提取名字,但我想知道是否有一种自然的方式来做到这一点。
我不能影响脚本被调用的方式,因为它是安装程序中的自动调用。
在我的系统上,变量$SUDO_USER
设置为调用者的用户名。
您不应该直接从${HOME}
变量中提取用户名。它正在进行配置和未计算。要提取用户名,您可以查看/etc/passwd
文件,但这是非常依赖系统的,例如,有时您必须查看LDAP目录或通过NIS传播条目...
检查变量SUDO_USER。
http://www.gratisoft.us/sudo/man/sudo.html#environment
另一种方式来获得用户是通过谁命令。有时候,当你不关心用户是否已经启动时,这很有用。
who -m | awk '{print $1;}'
SUDO_USER
不可携带。它在Fedora 17上未设置。
$USER
和$UID
变量在调用sudo时也是不可预测的。一些发行者报告了sudoer,另一些则报告了root用户。
这绝不是完美的,但你可以使用test -w ~root && echo I have write access to ~root
。
对于那些在这里登陆,因为gnome-terminal放弃了对'logname'的支持,这似乎很好''(logname 2>/dev/null || echo $ SUDO_USER)''。也在MacOS上测试过。错误报告:https://bugzilla.gnome.org/show_bug.cgi?id = 747046 – tresf