我想要的是找到运行 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
问题是:在 Ubuntu Desktop 16.04.4 who -m
(resp. who am i
) 中什么也不做。为什么?
另一个问题是为什么 Ubuntu 的在线手册页与在 Ubuntu 桌面或服务器上执行的who
不同?man who
但根据我的目标,这些问题并不那么重要。正如标题中提到的那样,主要问题是:如何找到使用时执行脚本的用户sudo
?
实际上,原始标题 -如何在 Ubuntu 桌面上找到“我是谁”?- 是相同但错误地提出的问题。
不久前我遇到了类似的问题,到目前为止,对我来说可靠的唯一方法是:
只要用户以自己的身份使用 shell,就
$USER
包含他的用户名。当他调用sudo
时,新的子shell$SUDO_USER
被设置为$USER
调用shell 中的内容,并且当然$USER
变成root
了。运算符的诀窍
:-
是,如果设置了整个表达式,则计算$SUDO_USER
结果为 (因此在由 . 打开的子shell 内sudo
),否则为$USER
. 因此,您始终拥有正确的用户名,并且不必太担心表达式在其中进行评估的上下文,我发现这很方便。虽然 Wanderer 提供的解决方案按预期工作,并且直接回答了这个问题,但在过去几年中,当我想强制脚本由某个(系统)用户执行时,我使用的是特殊的环境变量 Eeffective用户标识符 -
$EUID
。