How to return user name in a script even if run by SUDO?

Sundar Nagarajan sundar.personal at gmail.com
Wed Apr 8 05:55:41 UTC 2009


Smoot Carl-Mitchell wrote:
> On Tue, 2009-04-07 at 19:07 +0530, kapil singh kushwah wrote:
>> Hello ,
>>
>> It is working fine. I guess you did it
>> after login as a root.
>>
>> I am getting :
>>
>> common at common-laptop:~$ echo ${USER}
>> common
>> common at common-laptop:~$ sudo echo ${USER}
>> common
>> common at common-laptop:~$ 
> 
> Your conclusion is incorrect.  The ${USER} environment variable is being
> interpolated by the parent shell and *not* sudo.  As per the sudo man
> page, the SUDO_USER environment variable is available to tell you who
> invoked the command.  To use this in general in a bash script use a
> function like
> 
> function invoking_user {
>   export INVOKING_USER=$USER
>   [ "$SUDO_USER" ] && INVOKING_USER=$SUDO_USER
> }
> 
> which sets the INVOKING_USER environment variable.  You can use this to
> get the "real" user name of the user who ran the command.  It appears
> sudo is careful about setting SUDO_USER to the real username instead of
> using the USER environment variable which can be spoofed.

why not just use ${SUDO_USER:-$USER}
will return ${SUDO_USER} if set (when inside a sudo shell) and return 
${USER} otherwise (not inside a sudo shell).






More information about the ubuntu-users mailing list