How can I get the current user's username in Bash?

Bash

Bash Problem Overview


I am writing a program in Bash that needs to get the user's username.

I have heard of a thing called whoami, but I have no idea what it does or how to use it.

What command do I use to get the current username?

Bash Solutions


Solution 1 - Bash

On the command line, enter

whoami

or

echo "$USER"

To save these values to a variable, do

myvariable=$(whoami)

or

myvariable=$USER

Of course, you don't need to make a variable since that is what the $USER variable is for.

Solution 2 - Bash

An alternative to whoami is id -u -n.

id -u will return the user id (e.g. 0 for root).

Solution 3 - Bash

Use the standard Unix/Linux/BSD/MacOS command logname to retrieve the logged in user. This ignores the environment as well as sudo, as these are unreliable reporters. It will always print the logged in user's name and then exit. This command has been around since about 1981.

My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
Password:
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root

Solution 4 - Bash

A hack the I've used on Solaris 9 and Linux and which works fine for both of them:

ps -o user= -p $$ | awk '{print $1}'

This snippet prints the name of the user with the current EUID.

NOTE: you need Bash as the interpreter here.

On Solaris you have problems with methods, described above:

  • id does not accept the -u and -n parameters (so you will have to parse the output)
  • whoami does not exist (by default)
  • who am I prints owner of current terminal (ignores EUID)
  • $USER variable is set correctly only after reading profile files (for example, /etc/profile)

Solution 5 - Bash

Two commands:

  1. id prints the user id along with the groups. Format: uid=usernumber(username) ...

  2. whoami gives the current user name

Solution 6 - Bash

When root (sudo) permissions are required, which is usually 90%+ when using scripts, the methods in previous answers always give you root as the answer.

To get the current "logged in" user is just as simple, but it requires accessing different variables: $SUDO_UID and $SUDO_USER.

They can be echoed:

echo $SUDO_UID
echo $SUDO_USER

Or assigned, for example:

myuid=$SUDO_UID
myuname=$SUDO_USER

Solution 7 - Bash

In Solaris OS I used this command:

$ who am i     # Remember to use it with space.

On Linux- Someone already answered this in comments.

$ whoami       # Without space

Solution 8 - Bash

For Bash, KornShell (ksh), sh, etc. Many of your questions are quickly answered by either:

man [function]

to get the documentation for the system you are using or usually more conveniently:

google "man function"

This may give different results for some things where Linux and Unix have modest differences.

For this question, just enter "whoami" in your shell.

To script it:

myvar=$(whoami)

Solution 9 - Bash

The current user's username can be gotten in pure Bash with the ${parameter@operator} parameter expansion (introduced in Bash 4.4):

$ : \\u
$ printf '%s\n' "${_@P}"

The : built-in (synonym of true) is used instead of a temporary variable by setting the last argument, which is stored in $_. We then expand it (\u) as if it were a prompt string with the P operator.

This is better than using $USER, as $USER is just a regular environmental variable; it can be modified, unset, etc. Even if it isn't intentionally tampered with, a common case where it's still incorrect is when the user is switched without starting a login shell (su's default).

Solution 10 - Bash

REALUSER="${SUDO_USER:-${USER}}"

...gets you the regular user (if non-sudo) → or ← the regular user behind the current sudo call.

Solution 11 - Bash

On most Linux systems, simply typing whoami on the command line provides the user ID.

However, on Solaris, you may have to determine the user ID, by determining the UID of the user logged-in through the command below.

echo $UID

Once the UID is known, find the user by matching the UID against the /etc/passwd file.

cat /etc/passwd | cut -d":" -f1,3

Solution 12 - Bash

This is a small simple example bash script I made for pushing my code to my personal gitlab, it spits out my current username in my commit message.

# !/bin/sh
# This example script is for pushing my code to gitlab 
echo Starting Push for user :  $(whoami), Please enter Commit Message 
below: 
read varMessage  
# this prompts the user for an input messsage , then saves the result in 
# a variable 
git add . 
git commit -m "$(whoami): $varMessage" 
git push -u "url_of_project" master

Resultant commit message in my personal gitlab looks like this:-

walexia : updated Matplotib example

Solution 13 - Bash

All,

From what I'm seeing here all answers are wrong, especially if you entered the sudo mode, with all returning 'root' instead of the logged in user. The answer is in using 'who' and finding eh 'tty1' user and extracting that. Thw "w" command works the same and var=$SUDO_USER gets the real logged in user.

Cheers!

TBNK

Solution 14 - Bash

Get the current task's user_struct

#define get_current_user()				\
({										\
	struct user_struct *__u;			\
	const struct cred *__cred;			\
	__cred = current_cred();			\
	__u = get_uid(__cred->user);		\
	__u;								\
})

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionGeorgeView Question on Stackoverflow
Solution 1 - BashSethMMortonView Answer on Stackoverflow
Solution 2 - BashBrettView Answer on Stackoverflow
Solution 3 - BashDevin RView Answer on Stackoverflow
Solution 4 - BashElvenfighterView Answer on Stackoverflow
Solution 5 - BashSireesh YarlagaddaView Answer on Stackoverflow
Solution 6 - BashOldManRiverView Answer on Stackoverflow
Solution 7 - BashLin-manView Answer on Stackoverflow
Solution 8 - BashFred MitchellView Answer on Stackoverflow
Solution 9 - BashCrestwaveView Answer on Stackoverflow
Solution 10 - BashFrank NockeView Answer on Stackoverflow
Solution 11 - BashJohnView Answer on Stackoverflow
Solution 12 - BashwalexiaView Answer on Stackoverflow
Solution 13 - BashOldManRiverView Answer on Stackoverflow
Solution 14 - BashleesagaciousView Answer on Stackoverflow