Quiero crear una secuencia de comandos bash que debe ejecutarse con sudo pero debe tener en cuenta el nombre del usuario que no lo hizo. Entonces, si el usuario bob
ejecuta, sudo ./myscript.sh
me gustaría myscript.sh
saber quién bob
fue el que lo ejecutó.
Miremos adentro myscript.sh
:
USER=$(whoami)
# Do something that takes into account the username.
¿Cómo puedo saber el nombre del usuario que generó el proceso? Más específicamente, ¿qué debo usar en lugar de whoami
para obtener bob
y no root
?
bash
shell-script
sudo
users
marcio
fuente
fuente
USER=$(whoami)
. Tenga en cuenta queUSER
ya existe como una variable interna de shell. Además, si se trata de un script bash, no lo ejecute utilizandosh
, que solo tiene un subconjunto de características compatibles con POSIX.#!/usr/bin/env bash
en mis scripts de bash.sh
u otra cosa.Respuestas:
No estoy seguro de qué tan estándar es, pero al menos en los sistemas Ubuntu
sudo
establece las siguientes variables de entorno (entre otras, consulte laENVIRONMENT
sección de la página de manual de sudo):por ejemplo,
fuente
Si también quieres que funcione sin él
sudo
, úsalo${SUDO_USER:-$USER}
. Por ejemplo:Explicación
${var:-val}
se expandirá a$var
, a menos que esté desarmado o vacío, en cuyo caso se expandirá aval
.fuente