Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 使用sudo运行时在shell脚本中获取$USER?_Unix_Shell_Environment Variables_Sudo - Fatal编程技术网

Unix 使用sudo运行时在shell脚本中获取$USER?

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运行shell脚本,如何获得正确的$USER

我在Mac安装包中以postinstall脚本的形式运行它们,在那里它们会被自动sudo-ed,但我需要使用用户名

不过,$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
…但这取决于您的环境变量