Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

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=$('woami')
# do something that takes into account user name

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?

share|improve this question
    
That's not a valid script, I think you meant USER=$(whoami). Note that the USER already exists as a shell internal variable. Also, if it's a bash script, don't run it using sh, which only has a POSIX-compatible subset of features. –  nyuszika7h Jun 15 at 11:26
    
why not edit? fixed now. –  marcioAlmada Jun 15 at 18:03
    
It's too trivial, edits need to be at least 6 characters, at least suggested ones. –  nyuszika7h Jun 15 at 18:48
    
ok, I understand. Thanks for the tips :D I usually put a hashbang like this #!/usr/bin/env bash on my bash scripts. –  marcioAlmada Jun 15 at 21:30
    
The hashbang is ignored if you call it explicitly with sh or something else. –  nyuszika7h Jun 15 at 22:20
show 1 more comment

2 Answers 2

up vote 8 down vote accepted

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
share|improve this answer
    
Works as expected on all platforms I tested: debian, fedora(redhat) and freebsd. Thanks! –  marcioAlmada Jun 15 at 5:03
add comment

If you want it to work without sudo as well:

printf '%s\n' "${SUDO_USER:-$USER}"
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.