¿Por qué cuando cambio de usuario su <username>
y luego ejecuto who am i
sale el usuario anterior en el que estaba conectado y no al que he cambiado?
¿Por qué cuando cambio de usuario su <username>
y luego ejecuto who am i
sale el usuario anterior en el que estaba conectado y no al que he cambiado?
Respuestas:
Probablemente estés ejecutando el comando incorrecto.
who
está destinado a mostrar quién ha iniciado sesión, es decir, qué usuario posee el terminal. Devuelve una línea como esta:
ckhan pts/1 2012-11-05 03:06 (c-21-13-25-10.ddw.ca.isp.net)
whoami
es para mostrarle cuál es la identificación de usuario efectiva de la persona que lo ejecuta. Devuelve un solo nombre, como este (y es equivalente a la ejecución id -un
):
ckhan
Creo que puede haber escrito literalmente who am i
en la terminal, que se ejecutó who
con dos argumentos ignorados ( am
, i
).
Ver man who
y man whoami
para más detalles.
Según mi página de manual de Ubuntu 12.04.2 para el comando 'who', 'who am i' (o who con cualquiera de los dos argumentos) es lo mismo que 'who -m' y debería darle el nombre de host y el usuario asociados con STDIN. Sin embargo, no obtengo salida con 'who am i'. O la página del manual es incorrecta o el comando tiene un error. Independientemente, como respondió previamente ckhan, el comando 'whoami' le dará el nombre de usuario para su identificación de usuario efectiva. Al menos en Ubuntu 12.04.2, ninguno de id, 'who am i' o 'whoami' le dará solo el nombre de usuario de la persona que inició sesión en el terminal actual. Como solución alternativa, puede obtener eso con:
who | sed 's/ .*//'
Solución alternativa :
ls -l `tty` | awk '{print $3}'
que funciona como reemplazo de who am i | awk '{print $1}'
. Explicación a continuación:
En muchos sistemas " who am i
" es equivalente a " who -m
". ¡El problema aquí es que con algunos terminales , " who -m
" no devuelve nada!
Ejemplo # 1 ejecutado desde un terminal xfce4
Pegasus ~ # whoami
root
Pegasus ~ # who am i
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who -m
thomas pts/1 2017-08-19 11:15 (:0.0)
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ # who am i | awk '{print $1}'
thomas
Pegasus ~ #
pero Ejemplo # 2 desde un terminal gnome (misma computadora, mismos comandos)
Pegasus ~ # whoami
root
Pegasus ~ # who am i
Pegasus ~ # who -m
Pegasus ~ # who
thomas tty8 2017-08-19 10:18 (:0)
thomas pts/1 2017-08-19 11:15 (:0.0)
thomas pts/5 2017-08-19 16:16 (:0.0)
Pegasus ~ #
Esto parece ser una consecuencia de que gnome-terminal no agrega entradas utmp ...
stat
lugar: stat -c '%U' "$(tty)"
probablemente tampoco debería analizar who am i
, ya que los nombres de usuario pueden contener espacios en algunos casos raros.
am
yi
no se ignoran, incluso están especificados por POSIX: "En la configuración regional POSIX, limite la salida para describir al usuario que invoca, equivalente a la-m
opción".