Bash Script User – How to Get the Name of User Who Executed a Bash Script as Sudo

bashshell-scriptsudousers

I want to create a bash script that must be executed with sudo but should take into account the name of the non-sudo user who executed it. So if user bob runs sudo ./myscript.sh I would like myscript.sh to know bob was the one who executed it.

Let's look inside myscript.sh:

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

How can I know the name of the user who spawned the process? More specifically, what should I use instead of whoami to get bob and not root?

Best Answer

I'm not sure how standard it is, but at least in Ubuntu systems sudo sets the following environment variables (among others - see the ENVIRONMENT section of the sudo manpage):

   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

for example,

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