Parece que ninguno de los métodos propuestos hasta ahora funciona sin depender de $ USER o invocar un proceso separado. ¿No hay bash incorporado para obtener el nombre de usuario sin invocar un proceso separado?
ColinM
99
Cuando haya escuchado un comando pero no esté seguro de cómo usarlo, la verificación man whoamisuele ser una buena primera parada para verificar la documentación.
Mark Stosberg
Respuestas:
470
En la línea de comando, ingrese
whoami
o
echo "$USER"
Para guardar estos valores en una variable, haga
myvariable=$(whoami)
o
myvariable=$USER
Por supuesto, no necesita hacer una variable ya que para eso es la $USERvariable.
Solo una nota rápida de que $ USER y whoami devuelven valores diferentes si ejecuta un comando a través de ssh como otro usuario. whoami devuelve el usuario del sistema operativo y $ USER devuelve el usuario ssh.
BillMan
44
@BillMan, ¿qué significa eso? Podría dar un ejemplo?
Dejay Clayton
17
En algunos casos, $USERno está configurado en absoluto. Peor aún, es solo una variable de entorno, por lo que puede ser anulada por el usuario:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
sitaktif
1
@sitaktif ¿Qué sugiere como solución a este problema?
SethMMorton
3
@SethMMorton Me doy cuenta de que hice que el problema pareciera peor de lo normal. Sin embargo, para responder la pregunta, el uso whoami(como sugirió) elimina el problema por completo, suponiendo que las variables de entorno anuladas sean un problema potencial en su contexto.
sitaktif
81
Una alternativa a whoamies id -u -n.
id -udevolverá la identificación de usuario (por ejemplo, 0 para root ).
A menos que me equivoque, este sería el camino a seguir si la portabilidad es una preocupación, ya que el idcomando -uy las -nbanderas son parte de posix
3
Esta realmente debería ser la respuesta aceptada. "${USER}"y whoamiambos dependen de cómo inicies sesión. Específicamente, los shells de inicio de sesión y sudo establecerán $ USER y whoamimirarán al usuario adjunto a stdin. Sin embargo, si está ejecutando un trabajo por lotes desde cron, o está ejecutando un script de inicio como un usuario diferente al root, entonces estos generarán un usuario incorrecto (root) o nada en absoluto. Esta respuesta devolverá el valor correcto independientemente de la identificación de usuario del proceso.
Asfand Qazi
Esto no es útil si desea el nombre de usuario en lugar de la identificación
Jonathan
3
Si probaste el comando antes de agregar comentarios falsos, verías que el -nargumento imprime el nombre de usuario, al igual que la pregunta original. vea lo siguiente: id -u -nimpresiones brett, incluso en darwin.
Brett
20
Utilice el comando estándar Unix / Linux / BSD / MacOS lognamepara recuperar el usuario conectado. Esto ignora el medio ambiente y el sudo, ya que estos son reporteros poco confiables. Siempre imprimirá el nombre del usuario conectado y luego saldrá. Este comando ha existido desde aproximadamente 1981.
¿Por qué necesitas bash como intérprete? Nada en la línea de comando que se muestra parece ser específico de ningún shell. De hecho, ¿por qué incluso incluir la tubería a través de awk? Por lo que puedo decir, su pscomando es todo lo necesario para mostrar al propietario del pid del shell actual.
ghoti
Para nosotros, como humanos, ignorar la información superflua es natural. La parte awk aísla los datos deseados, para variables o en general la computadora que aún no puede hacer suposiciones sobre la marcha en este nivel rudimentario.
BradChesney79
En Solaris, use command -p id(desde un shell POSIX) o /usr/xpg4/bin/id. En términos más generales, en Solaris, desearía modificar su entorno para PATH=ubicarse en un entorno POSIX (con algo como getconf PATH` y asegúrese de ejecutarlo /usr/xpg4/bin/sh) para evitar quedarse atascado con comandos de los años 70/80.
Stephane Chazelas
'ps: opción desconocida - o'
Anand Rockzz
12
Dos comandos:
id imprime la identificación de usuario junto con los grupos. Formato:uid=usernumber(username) ...
$ whoami no está disponible como variable en bash. ¡Necesita hacer $ (whoami) o `whoami` para ejecutar realmente el comando whoami!
Rudolf Mayer
@RudolfMayer lo arreglé
wjandrea
6
Cuando se requieren permisos de root (sudo), que generalmente son 90% + cuando se usan scripts, los métodos en las respuestas anteriores siempre le dan rootla respuesta.
Obtener el usuario actual "conectado" es igual de simple, pero requiere acceder a diferentes variables: $SUDO_UIDy $SUDO_USER.
El nombre de usuario del usuario actual se puede obtener en Bash puro con la ${parameter@operator}expansión de parámetros (introducida en Bash 4.4):
$ : \\u
$ printf '%s\n'"${_@P}"
El :incorporado (sinónimo de true) se usa en lugar de una variable temporal estableciendo el último argumento, que se almacena en $_. Luego lo expandimos ( \u) como si fuera una cadena de solicitud con el Poperador.
Esto es mejor que usar $USER, ya que $USERes solo una variable ambiental regular; puede modificarse, desarmarse, etc. Incluso si no se manipula intencionalmente, un caso común en el que todavía es incorrecto es cuando el usuario cambia sin iniciar un shell de inicio de sesión ( supredeterminado).
En la mayoría de los sistemas Linux, simplemente escribiendo whoami en la línea de comando proporciona la ID de usuario.
Sin embargo, en Solaris, es posible que deba determinar la ID de usuario, determinando el UID del usuario que inició sesión a través del siguiente comando.
echo $UID
Una vez que se conoce el UID, encuentre al usuario haciendo coincidir el UID con el /etc/passwdarchivo.
La pregunta era sobre cómo obtener el nombre de usuario dentro de un script bash. Esta respuesta trata sobre cómo obtener la ID de usuario numérica (no el nombre de usuario) del código C que se ejecuta dentro del kernel de Linux (como un módulo de kernel de Linux personalizado). No es una respuesta a la pregunta que se hizo, es una respuesta a una pregunta diferente.
man whoami
suele ser una buena primera parada para verificar la documentación.Respuestas:
En la línea de comando, ingrese
o
Para guardar estos valores en una variable, haga
o
Por supuesto, no necesita hacer una variable ya que para eso es la
$USER
variable.fuente
$USER
no está configurado en absoluto. Peor aún, es solo una variable de entorno, por lo que puede ser anulada por el usuario:USER=thisisnotmyname bash -c 'echo $USER' # prints thisisnotmyname
whoami
(como sugirió) elimina el problema por completo, suponiendo que las variables de entorno anuladas sean un problema potencial en su contexto.Una alternativa a
whoami
esid -u -n
.id -u
devolverá la identificación de usuario (por ejemplo, 0 para root ).fuente
id
comando-u
y las-n
banderas son parte de posix"${USER}"
ywhoami
ambos dependen de cómo inicies sesión. Específicamente, los shells de inicio de sesión y sudo establecerán $ USER ywhoami
mirarán al usuario adjunto a stdin. Sin embargo, si está ejecutando un trabajo por lotes desde cron, o está ejecutando un script de inicio como un usuario diferente al root, entonces estos generarán un usuario incorrecto (root) o nada en absoluto. Esta respuesta devolverá el valor correcto independientemente de la identificación de usuario del proceso.-n
argumento imprime el nombre de usuario, al igual que la pregunta original. vea lo siguiente:id -u -n
impresionesbrett
, incluso en darwin.Utilice el comando estándar Unix / Linux / BSD / MacOS
logname
para recuperar el usuario conectado. Esto ignora el medio ambiente y el sudo, ya que estos son reporteros poco confiables. Siempre imprimirá el nombre del usuario conectado y luego saldrá. Este comando ha existido desde aproximadamente 1981.fuente
Un truco que he usado en Solaris 9 y Linux y que funciona bien para ambos:
Este fragmento imprime el nombre del usuario con el EUID actual.
NOTA: necesita Bash como intérprete aquí.
En Solaris tiene problemas con los métodos, descritos anteriormente:
id
no acepta los parámetros-u
y-n
(por lo que tendrá que analizar la salida)whoami
no existe (por defecto)who am I
imprime el propietario del terminal actual (ignora EUID)$USER
La variable se establece correctamente solo después de leer los archivos de perfil (por ejemplo,/etc/profile
)fuente
ps
comando es todo lo necesario para mostrar al propietario del pid del shell actual.command -p id
(desde un shell POSIX) o/usr/xpg4/bin/id
. En términos más generales, en Solaris, desearía modificar su entorno paraPATH=
ubicarse en un entorno POSIX (con algo como getconf PATH` y asegúrese de ejecutarlo/usr/xpg4/bin/sh
) para evitar quedarse atascado con comandos de los años 70/80.Dos comandos:
id
imprime la identificación de usuario junto con los grupos. Formato:uid=usernumber(username) ...
whoami
da el nombre de usuario actualfuente
Cuando se requieren permisos de root (sudo), que generalmente son 90% + cuando se usan scripts, los métodos en las respuestas anteriores siempre le dan
root
la respuesta.Obtener el usuario actual "conectado" es igual de simple, pero requiere acceder a diferentes variables:
$SUDO_UID
y$SUDO_USER
.Pueden hacerse eco:
O asignado, por ejemplo:
fuente
En Solaris OS utilicé este comando:
En Linux: alguien ya respondió esto en los comentarios.
fuente
Para Bash , KornShell (
ksh
),sh
etc. Muchas de sus preguntas son respondidas rápidamente por:para obtener la documentación del sistema que está utilizando o, por lo general, más convenientemente:
google "función man"
Esto puede dar resultados diferentes para algunas cosas donde Linux y Unix tienen diferencias modestas.
Para esta pregunta, simplemente ingrese "whoami" en su caparazón.
Para escribirlo:
fuente
El nombre de usuario del usuario actual se puede obtener en Bash puro con la
${parameter@operator}
expansión de parámetros (introducida en Bash 4.4):El
:
incorporado (sinónimo detrue
) se usa en lugar de una variable temporal estableciendo el último argumento, que se almacena en$_
. Luego lo expandimos (\u
) como si fuera una cadena de solicitud con elP
operador.Esto es mejor que usar
$USER
, ya que$USER
es solo una variable ambiental regular; puede modificarse, desarmarse, etc. Incluso si no se manipula intencionalmente, un caso común en el que todavía es incorrecto es cuando el usuario cambia sin iniciar un shell de inicio de sesión (su
predeterminado).fuente
En la mayoría de los sistemas Linux, simplemente escribiendo whoami en la línea de comando proporciona la ID de usuario.
Sin embargo, en Solaris, es posible que deba determinar la ID de usuario, determinando el UID del usuario que inició sesión a través del siguiente comando.
Una vez que se conoce el UID, encuentre al usuario haciendo coincidir el UID con el
/etc/passwd
archivo.fuente
Obtener la estructura de usuario de la tarea actual
fuente