如果我使用 sudo 运行 shell 脚本,如何获得正确的 $USER ?
我在 Mac 安装包中将它们作为安装后脚本运行,它们会自动被 sudo 编辑,但我需要用用户名做一些事情。
不过,$HOME 是正确的。不优雅的方法是从主路径中提取名称,但我想知道是否有一种自然的方法可以做到这一点。
我无法影响调用脚本的方式,因为它是安装程序内部的自动调用。
如果我使用 sudo 运行 shell 脚本,如何获得正确的 $USER ?
我在 Mac 安装包中将它们作为安装后脚本运行,它们会自动被 sudo 编辑,但我需要用用户名做一些事情。
不过,$HOME 是正确的。不优雅的方法是从主路径中提取名称,但我想知道是否有一种自然的方法可以做到这一点。
我无法影响调用脚本的方式,因为它是安装程序内部的自动调用。
在我的系统上,该变量$SUDO_USER
设置为调用者的用户名。
您不应该${HOME}
直接从变量中提取用户名。它正在配置而不是计算。要提取用户名,您可以查看/etc/passwd
文件,但这非常依赖于系统,例如有时您必须查看 LDAP 目录或条目通过 NIS 传播......
You can use $(logname)
, which returns your login name even if you are currently sudoing.
检查变量SUDO_USER。
http://www.gratisoft.us/sudo/man/sudo.html#environment
另一种获取用户的方法是通过who命令。当您不关心用户是否有 sudo 时,这有时很有用。
who -m | awk '{print $1;}'
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
.