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
。因此,您始终拥有正确的用户名,而不必太担心表达式计算所在的上下文,我发现这很方便。