在sudo调用的Bash脚本中标识用户

时间:2010-08-19 13:38:21

标签: linux bash sudo

如果我创建包含以下内容的脚本/root/bin/whoami.sh

#!/bin/bash
whoami

并且这个脚本由具有正确配置的sudo的用户调用,它将指示

root

有没有快速的方法来获取脚本中的实际用户,还是我必须求助于传递此用户名的参数?

8 个答案:

答案 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],这些工作都有效。无论调用susudo多少次,它也都有效。

答案 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)

此处不正确使用whoamiwho am iwhoid$SUDO_USER

实际上,who从来不是解决问题的方法,因为它只会列出已登录的用户,可能是几十个...

在我眼中,唯一有价值的答案是使用logname

希望这会有所帮助

Rob

答案 6 :(得分:0)

如果它是您要查找的UID(对docker shenanigans有用),则可以使用:

JsonElement

答案 7 :(得分:-4)

尝试:
id -urn