How do I get the name of the active user via the command line in OS X?
13 Answers
as 'whoami' has been obsoleted, it's probably more forward compatible to use:
id -un 6 Comments
whoami on Leopard confirms that it has been replaced by id.whoami and id still work on my macOS Big Sur 11.3.1 system. I haven't knowingly installed or configured anything that would have added it back, so maybe it's just still around?If you'd like to display the full name (instead of the username), add the -F flag:
$ id -F Andrew Havens 2 Comments
15.0; Make sure you are using /usr/bin/idEDIT
The whoami utility has been obsoleted by the id(1) utility, and is equivalent to id -un. The command id -p is suggested for normal interactive use.
Comments
2 Comments
sudo id -un to get the name of the logged-in user (as id is more "what is the id of the user who's running the id command). That makes id great for "what user is running my script", but not for admin duties.You can also use the logname command from the BSD General Commands Manual under Linux or MacOS to see the username of the user currently logged in, even if the user is performing a sudo operation. This is useful, for instance, when modifying a user's crontab while installing a system-wide package with sudo: crontab -u $(logname)
Per man logname:
LOGNAME(1) NAME logname -- display user's login name 1 Comment
If you want to know who's currently logged in to the system:
$ w 15:56:14 up 5 days, 20:58, 6 users, load average: 0.43, 0.53, 0.50 USER TTY LOGIN@ IDLE JCPU PCPU WHAT me pts/2 Fri19 1:03m 0.98s 0.98s -/bin/bash me pts/3 09:55 6:00m 0.43s 0.43s /bin/bash me pts/5 15:56 0.00s 0.23s 0.00s w
(This is from a Linux system; the formatting on OS X may be slightly different, but the information should be about the same.)
There may be multiple login sessions; UNIX is designed to be a multi-user system, after all.
Comments
The question has not been completely answered, IMHO. I will try to explain: I have a crontab entry that schedules a bash shell command procedure, that in turn does some cleanup of my files; and, when done, sends a notification to me using the OS X notification center (with the command osascript -e 'display notification ...). If someone (e.g. my wife or my daughter) switches the current user of the computer to her, leaving me in the background, the cron script fails when sending the notification.
So, Who is the current user means Has some other people become the effective user leaving me in the background? Do stat -f "%Su" /dev/console returns the current active user name?
The answer is yes; so, now my crontab shell script has been modified in the following way:
... if [ "$(/usr/bin/stat -f ""%Su"" /dev/console)" = "loreti" ] then /usr/bin/osascript -e \ 'display notification "Cleanup done" sound name "sosumi" with title "myCleanup"' fi Comments
Define 'active user'.
If the question is 'who is the logged in user', then 'who am i' or 'whoami' is fine (though they give different answers - 'whoami' reports just a user name; 'who am i' reports on terminal and login time too).
If the question is 'which user ID is the effective ID for the shell', then it is often better to use 'id'. This reports on the real and effective user ID and group ID, and on the supplementary group IDs too. This might matter if the shell is running SUID or SGID.
