如何获取以 sudo 身份执行 bash 脚本的用户名?

如何获取以 sudo 身份执行 bash 脚本的用户名?

我想创建一个必须使用 sudo 执行的 bash 脚本,但应考虑执行它的非 sudo 用户的名称。因此,如果用户bob运行,sudo ./myscript.sh我想myscript.sh知道bob是谁执行了它。

让我们看看里面myscript.sh

USER=$(whoami)
# Do something that takes into account the username.

我如何知道生成该进程的用户的名称?更具体地说,我应该使用什么来代替whoamigetbob和 not root

答案1

我不确定它有多标准,但至少在 Ubuntu 系统中sudo设置了以下环境变量(除其他外 - 请参阅ENVIRONMENTsudo 手册页的部分):

   SUDO_UID        Set to the user ID of the user who invoked sudo

   SUDO_USER       Set to the login of the user who invoked sudo

例如,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver

答案2

sudo如果您希望它在没有情况下也能工作,请使用${SUDO_USER:-$USER}.例如:

printf '%s\n' "${SUDO_USER:-$USER}"

${var:-val}将扩展为$var,除非它未设置或为空,在这种情况下它将扩展为val

相关内容