Respuestas:
De las variables de entorno ,
$LOGNAME
es lo mismo $USER
que da
El nombre del usuario actualmente conectado. Esta variable es establecida por el sistema. Probablemente no debería cambiar su valor manualmente.
De man logname
logname: imprime el nombre de inicio de sesión del usuario
Ampliado de manera diferente mediante el siguiente ejemplo:
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
Aquí puede ver la diferencia después de iniciar sesión como root en la terminal,
$LOGNAME
da el nombre del usuario actualmente conectado en la terminal (es decir root
)logname
imprime el nombre de usuario del usuario que inició sesión (es decir pandya
)El nombre de registro de la utilidad está roto en 16.04, aparentemente a propósito porque es posible hackear el valor que devuelve, lo que podría ser una falla de seguridad. https://bugzilla.gnome.org/show_bug.cgi?id=747046 Había estado usando logname en algunos scripts, y lo encontré útil porque siempre devolvía el mismo valor (mi nombre de usuario) si lo llamaba desde un mi propio nivel o desde una invocación de sudo, mientras que las variables de entorno $ USER y $ LOGNAME no lo hacen. No me preocupaba que alguien pirateara mi computadora y modificara el valor que devuelve. Por desgracia ... he encontrado una solución. Creé un archivo en mi directorio de inicio como tal
echo $USER > ~/.logname
Cuando quiero acceder a mi nombre de registro (por ejemplo, asignar a una variable Bash g_logname), lo hago así:
declare g_logname="$(<~/.logname)";
Esto funciona para mí, ya sea como yo mismo o en el nivel raíz a través de sudo, que mantiene la asignación de "~" como mi directorio de inicio. Puedo crear un archivo .logname para el directorio de inicio de cada usuario en el sistema. Sí, alguien podría piratear mi computadora y cambiar estos archivos, pero no estoy realmente preocupado por eso. Solo quiero que mis guiones funcionen.