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。因此,您始终拥有正确的用户名,而不必太担心表达式计算所在的上下文,我发现这很方便。
| 归档时间: |
|
| 查看次数: |
3557 次 |
| 最近记录: |