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

我在Mac安装包中将它们作为postinstall脚本运行,它们会自动被sudo-ed,但我需要使用用户名。

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

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

有帮助吗?

解决方案

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

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

其他提示

您可以使用 $(logname),即使您当前正在撒谎,也会返回您的登录名。

检查变量 SUDO_USER

http://www.gratisoft.us/sudo/man/sudo。 HTML#环境

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

who -m | awk '{print $1;}'

SUDO_USER 不可移植。它在Fedora 17上没有设置。

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

这绝不是完美的,但你可以使用 test -w~root&& echo我有~root 的写访问权。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top