如果我创建包含以下内容的脚本/root/bin/whoami.sh
#!/bin/bash
whoami
并且这个脚本由具有正确配置的sudo的用户调用,它将指示
root
有没有快速的方法来获取脚本中的实际用户,还是我必须求助于传递此用户名的参数?
答案 0 :(得分:119)
如果您使用sudo su -
,则$ SUDO_USER无效
它还需要多次检查 - 如果$USER == 'root'
则获取$SUDO_USER
。
而不是命令whoami
使用who am i
。这将运行为当前会话筛选的who
命令。它为您提供了比您需要的更多信息。所以,这样做只是为了得到用户:
who am i | awk '{print $1}'
或者(并且更简单),您可以使用logname
。它与上述声明的作用相同。
这将为您提供登录会话的用户名。
无论sudo
还是sudo su [whatever]
,这些工作都有效。无论调用su
和sudo
多少次,它也都有效。
答案 1 :(得分:49)
我认为$SUDO_USER有效。
#!/bin/bash
echo $SUDO_USER
whoami
答案 2 :(得分:12)
以下是如何获取调用脚本的人的用户名,无论是否为sudo:
if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi
或更短的版本
[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
答案 3 :(得分:2)
who am i | awk '{print $1}'
对我不起作用
who|awk '{print $1}'
将为此工作服务
答案 4 :(得分:1)
奇怪的是,系统确实区分了real and effective UIDs,但是我找不到在shell级别导出它的程序。
答案 5 :(得分:0)
此处不正确使用whoami
,who am i
,who
,id
或$SUDO_USER
。
实际上,who
从来不是解决问题的方法,因为它只会列出已登录的用户,可能是几十个...
在我眼中,唯一有价值的答案是使用logname
。
希望这会有所帮助
Rob
答案 6 :(得分:0)
如果它是您要查找的UID(对docker shenanigans有用),则可以使用:
JsonElement
答案 7 :(得分:-4)
尝试:
id -urn