125

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

#!/bin/bash
whoami

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

root

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

4

7 回答 7

156

如果您使用 $SUDO_USER 将不起作用sudo su -
它还需要多次检查 - if $USER == 'root'then get $SUDO_USER

而不是命令whoami使用who am i. 这将运行who为当前会话过滤的命令。它为您提供了比您需要的更多的信息。所以,这样做只是为了得到用户:

who am i | awk '{print $1}'

或者(更简单)您可以使用logname. 它的作用与上述语句相同。

这将为您提供登录会话的用户名。

这些工作不管sudosudo su [whatever]。无论调用多少次su,它也都有效。sudo

于 2011-01-04T20:10:02.917 回答
62

我认为$SUDO_USER是有效的。

#!/bin/bash
echo $SUDO_USER
whoami
于 2010-08-19T13:45:27.627 回答
15

以下是如何获取调用脚本的人的用户名,无论是否使用 sudo:

if [ $SUDO_USER ]; then user=$SUDO_USER; else user=`whoami`; fi

或更短的版本

[ $SUDO_USER ] && user=$SUDO_USER || user=`whoami`
于 2013-01-20T21:09:26.980 回答
4

如果它是您正在寻找的 UID(对 docker 恶作剧很有用),那么这有效:

LOCAL_USER_ID=$(id -u $(logname))
于 2019-09-11T13:10:49.693 回答
4

使用whoami, who am i, who, idor$SUDO_USER不在这里。

实际上,who这永远不是问题的解决方案,因为它只会列出已登录的用户,可能有几十个......

在我看来,唯一有价值的答案是使用logname.

希望这可以帮助

于 2019-08-04T22:47:09.400 回答
2

who am i | awk '{print $1}'不适合我,但 who|awk '{print $1}'会为工作服务

于 2017-05-22T10:58:36.200 回答
1

奇怪的是,系统确实区分了真实和有效的 UID,但我找不到在 shell 级别导出它的程序。

于 2010-08-19T13:49:06.573 回答