2011-09-09 14 views

Respuesta

26

El directorio de inicio del usuario sería ~$SUDO_USER. Puede utilizar eval de la siguiente manera:

USER_HOME=$(eval echo ~${SUDO_USER}) 
echo ${USER_HOME} 
+2

Intenta evitar' eval'. Ver mi respuesta sin 'eval'. –

+0

No necesita el 'eval' aquí. El '~' es la expansión del shell, por lo que 'echo ~ user' es suficiente. – Craig

+1

Sí, necesita 'eval' porque el usuario está almacenado en una variable. – dogbane

3

intente acceder a la variable de entorno $ SUDO_USER

+2

Ejemplo: 'sudo sh -c 'echo ~ $ SUDO_USER'' – l0b0

8
$ sudo env |grep USER 
USER=root 
USERNAME=root 
SUDO_USER=glglgl 

para que pueda acceder $SUDO_USER y pedir al sistema por su homedir con getent passwd $SUDO_USER | cut -d: -f6.

39

Trate de evitar eval. Especialmente con perms raíz.

que puede hacer:

USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6) 

Actualización:

here Es por ello que para evitar eval.

+0

Revertí la publicación original. La simplificación sugerida fue incorrecta. –

+0

@downvoter: Si rechaza su voto, deje el comentario en su opinión. De lo contrario, no es constructivo. Gracias. –

+0

Supongo que la votación negativa se debió a la falta de explicación para evitar la evaluación. ¡Me gustaría saber las razones para evitarlo ahora! – bunnydrug

2

A menos que malinterprete la pregunta, cuando el usuario ejecuta el script con sudo, la variable de entorno $HOME no cambia. Para poner a prueba, he creado este script:

#!/bin/bash 
#sudo_user.sh 
env | grep -e USER -e HOME 

... y ejecutarlo:

sudo ./sudo_user.sh 

Salida:

USER=root 
HOME=/home/haiv 
USERNAME=root 
SUDO_USER=haiv 

La salida me dice que $HOME sigue apuntando a la el hogar del usuario (en este caso, /home/haiv).

Cuestiones relacionadas