Unix 使用sudo运行时在shell脚本中获取$USER?
如果使用sudo运行shell脚本,如何获得正确的$USER 我在Mac安装包中以postinstall脚本的形式运行它们,在那里它们会被自动sudo-ed,但我需要使用用户名 不过,$HOME是正确的。不雅观的方法是从主路径中提取名称,但我想知道是否有一种自然的方法可以做到这一点Unix 使用sudo运行时在shell脚本中获取$USER?,unix,shell,environment-variables,sudo,Unix,Shell,Environment Variables,Sudo,如果使用sudo运行shell脚本,如何获得正确的$USER 我在Mac安装包中以postinstall脚本的形式运行它们,在那里它们会被自动sudo-ed,但我需要使用用户名 不过,$HOME是正确的。不雅观的方法是从主路径中提取名称,但我想知道是否有一种自然的方法可以做到这一点 我无法影响调用脚本的方式,因为这是安装程序内部的自动调用。在我的系统上,变量$SUDO\u USER设置为调用方的用户名 您不应该直接从${HOME}变量中提取用户名。它正在配置,而不是计算。要提取用户名,您可以查看
我无法影响调用脚本的方式,因为这是安装程序内部的自动调用。在我的系统上,变量
$SUDO\u USER
设置为调用方的用户名
您不应该直接从
${HOME}
变量中提取用户名。它正在配置,而不是计算。要提取用户名,您可以查看/etc/passwd
文件,但这非常依赖于系统,例如,有时您必须查看LDAP目录或条目通过NIS传播…检查变量SUDO_USER
获取用户的另一种方法是通过who命令。当您不关心用户是否有sudo'd时,这有时很有用
who -m | awk '{print $1;}'
SUDO\u用户
不可移植。在Fedora 17上是未设置的
调用sudo时,$USER
和$UID
变量也不可预测。一些发行版报告sudoer,其他发行版报告root用户
它绝对不是完美的,但是你可以使用
test-w~root&&echo我有~root
的写权限你可以使用$(logname)
,它会返回你的登录名,即使你现在正在sudo。对于那些在这里登陆的人,因为gnome终端放弃了对logname
的支持,这似乎很有效$(logname 2>/dev/null | | echo$SUDO_USER)
。也在MacOS上测试过。错误报告:logname 2>/dev/null | | echo$SUDO_用户,命令在操作系统Ubuntu 16.04.6 LTS和Ubuntu 20.04 LTS中对我有效。@Knetic对于未来的你和其他谷歌用户,它可能不会:它在Ubuntu 16.04.1 LTSOn Arch Linux上返回SUDO名称。我建议使用echo$logname
…但这取决于您的环境变量