Reputation: 2243
How do I get the correct $USER if I run a shell script with sudo ?
I run them as postinstall scripts in a Mac install package, where they are being sudo-ed automatically, but I need to do stuff with the username.
$HOME is correct, though. The inelegant method would be to extract the name from the home path, but I wonder if there is a natural way to do this.
I can't influence the way the scripts are being called, as it's an automatic call inside the installer.
Upvotes: 47
Views: 25108
Reputation: 41955
You can use $(logname)
, which returns your login name even if you are currently sudoing.
Upvotes: 29
Reputation: 1326
On my system the variable $SUDO_USER
is set to the caller's user name.
You shouldn't extract the username from the ${HOME}
variable directly. It's being configured and not calculated. To Extract the username you could take a look into /etc/passwd
file, but this is very system dependent, e.g. sometimes you have to look into a LDAP directory or the entries are propagated through NIS ...
Upvotes: 46
Reputation: 91
SUDO_USER
isn't portable. It's unset on Fedora 17.
The $USER
and $UID
variables aren't predictable when invoking sudo either. Some distros report the sudoer, others report the root user.
It's by no means perfect, but you could use test -w ~root && echo I have write access to ~root
.
Upvotes: 9
Reputation: 29872
Inspect the variable SUDO_USER.
http://www.gratisoft.us/sudo/man/sudo.html#environment
Another way to get the user is via the who command. This is useful sometimes when you don't care if the user has sudo'd or not.
who -m | awk '{print $1;}'
Upvotes: 19