¿Puedo acceder a la variable $USER de origen desde un script ejecutado con `sudo`?

¿Puedo acceder a la variable $USER de origen desde un script ejecutado con `sudo`?

Una pregunta rara, lo sé. Aquí está el guión:

echo $USER

Aquí está el comando que uso para ejecutarlo:

sudo ./myscript.sh

En este momento imprime "root" pero quiero que imprima jonmi nombre de usuario. ¿Hay alguna manera de hacerlo cambiando el script y no el comando?

Respuesta1

Utilice la SUDO_USERvariable de entorno en lugar de USER.

sudocoloca el nombre del usuario que lo ejecutó en la SUDO_USERvariable de entorno:

ek@Io:~$ sudo sh -c 'echo $USER'
[sudo] password for ek:
root
ek@Io:~$ sudo sh -c 'echo $SUDO_USER'
ek

Entonces puedes simplemente reemplazar $USERcon $SUDO_USERen tu script:

echo $SUDO_USER

Otras lecturas

Respuesta2

Además deLa respuesta de @Eliah Kagan arriba, me gustaría señalar que también puedes tener fácilmente una expansión que funcione tanto si se ejecuta en un sudocontexto como si no:

echo "${SUDO_USER:-$USER}"

Esto se expande al valor de $SUDO_USERde forma predeterminada, pero si esa variable no está configurada o está vacía, vuelve al valor de $USER.

$ bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

$ sudo bash -c 'echo "${SUDO_USER:-$USER}"'
bytecommander

Puede encontrar más información sobre la expansión de parámetros predeterminados en Bash, por ejemplo, enhttps://wiki.bash-hackers.org/syntax/pe#use_a_default_value.

información relacionada