¿Cómo puedo get el nombre completo del usuario que está conectado actualmente a través de Terminal cuando se ejecuta como root?

Este command funciona genial para enumerar el nombre completo:

finger $(whoami) | egrep -o 'Name: [a-zA-Z0-9 ]{1,}' | cut -d ':' -f 2 | xargs echo 

Pero, si lo ejecuta después de

 sudo su 

Devuelve el administrador del sistema raíz de CVMS

Me pregunto si hay otro lugar para leer la variable de nombre completo. ¿Hay algún object de usuario en alguna parte que lo mencione? Pensé que estaba en algo con

 dscacheutil -q user | grep -A 3 -B 2 -e uid:\ 5'[0-9][0-9]' 

Pero no parece que el nombre completo esté representado en esos datos de retorno.

Puede usar dscl para leer RealName:

 $ dscl . -read /Users/grgarside RealName RealName: George Garside 

Lo siguiente le dará exactamente lo que busca. Esto usa 'quién soy yo' para get el nombre de usuario, luego se sed para formatear la salida.

 $ dscl . -read "/Users/$(who am i | awk '{print $1}')" RealName | sed -n 's/^ //g;2p' George Garside 

Simplemente use id -P $(stat -f%Su /dev/console) | awk -F '[:]' '{print $8}' id -P $(stat -f%Su /dev/console) | awk -F '[:]' '{print $8}'

id -P $(stat -f%Su /dev/console) produce:

 adminuser:********:501:20::0:0:AdminUser:/Users/adminuser:/bin/bash 

awk -F '[:]' '{print $8}' produce el octavo término (el "Nombre Real") de una salida separada por dos puntos.

Según lo propuesto por fd0 , puedes usar alternativamente:

 id -P $(stat -f%Su /dev/console) | cut -d : -f 8 

que es aún más simple / elegante.

Se necesitaba un enfoque de dos líneas:

 username="$(stat -f%Su /dev/console)" realname="$(dscl . -read /Users/$username RealName | cut -d: -f2 | sed -e 's/^[ \t]*//' | grep -v "^$")" 

Y luego puedes hacer eco de la variable de nombre real.