使用sudo时如何找到哪个用户执行脚本?

pa4*_*080 3 command-line bash who 16.04

我想要的是找到运行 bash 脚本的用户的名称,当这个脚本由sudo. 据我所知,唯一可能的方法是以这种方式解析who -m( who am i)的输出:

user@UbuntuServer:~$ cat who.sh 
#!/bin/sh
whoami
echo $USER
who -m | awk '{print $1}'

user@UbuntuServer:~$ sudo ./who.sh 
root
root
user
Run Code Online (Sandbox Code Playgroud)

问题是:在 Ubuntu Desktop 16.04.4 who -m(resp. who am i) 中什么都不做。为什么?

在此处输入图片说明

另一个问题是为什么 Ubuntu 的在线手册页与在 Ubuntu 桌面或服务器上执行who不同man who

但根据我的目标,这些问题并不是那么重要。正如标题中提到的,主要问题是:我如何找到哪个用户在使用时执行脚本sudo


实际上,原始标题 -如何在 Ubuntu 桌面上找到“我是谁”?- 是相同但错误地提出的问题。

小智 11

不久前我遇到了类似的问题,到目前为止,对我来说可靠的唯一方法是:

echo ${SUDO_USER:-${USER}}
Run Code Online (Sandbox Code Playgroud)

只要用户以自己的身份使用 shell,就$USER包含他的用户名。当他调用 时sudo,新的子shell$SUDO_USER被设置为$USER调用shell 中的内容,当然$USER变成root了。

操作符的技巧:-是,整个表达式的计算$SUDO_USER结果是它是否被设置(所以在由 开启的子shell 内sudo),否则为$USER。因此,您始终拥有正确的用户名,而不必太担心表达式计算所在的上下文,我发现这很方便。