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

mar*_*cio 20 bash users sudo shell-script

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

让我们看看里面myscript.sh:

USER=$(whoami)
# Do something that takes into account the username.
Run Code Online (Sandbox Code Playgroud)

我怎么知道产生这个进程的用户的名字?更具体地说,我应该使用什么而不是whoami获取bob而不是root?

ste*_*ver 32

我不确定它有多标准,但至少在 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
Run Code Online (Sandbox Code Playgroud)

例如,

steeldriver@lap-t61p:~$ sudo sh -c 'whoami'
root
steeldriver@lap-t61p:~$ sudo sh -c 'echo $SUDO_USER'
steeldriver
Run Code Online (Sandbox Code Playgroud)


nyu*_*a7h 10

如果您希望它也能正常工作sudo,请使用${SUDO_USER:-$USER}. 例如:

printf '%s\n' "${SUDO_USER:-$USER}"
Run Code Online (Sandbox Code Playgroud)

解释

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