Tengo un script sh que debe ejecutarse como root, sin embargo, es ejecutado por el usuario final usando sudo. ¿Cómo puedo obtener el directorio de inicio de los usuarios cuando ~/apunta a/root cuando se ejecuta con sudo?Obtener el directorio de inicio de los usuarios cuando ejecutan un script como root
Respuesta
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}
intente acceder a la variable de entorno $ SUDO_USER
Ejemplo: 'sudo sh -c 'echo ~ $ SUDO_USER'' – l0b0
$ 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
.
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.
Revertí la publicación original. La simplificación sugerida fue incorrecta. –
@downvoter: Si rechaza su voto, deje el comentario en su opinión. De lo contrario, no es constructivo. Gracias. –
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
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).
- 1. Los scripts de shell en Mac OS X se ejecutan desde el directorio de inicio?
- 2. Llamar a un script desde un programa setuid root C - script no se ejecuta como root
- 3. Ejecutar un script como root a través de ADB
- 4. autenticación en el script de Python para ejecutar como root
- 5. ¿Cómo ejecuto un script de shell como root (sudo)?
- 6. Obtener el directorio de inicio del usuario
- 7. Obtener directorio de inicio en Linux, C++
- 8. Obtener el directorio de un archivo de script bash en
- 9. Comando para comprimir un directorio utilizando un directorio específico como root
- 10. ¿Cuál es la mejor manera de encontrar el directorio de inicio de los usuarios en Java?
- 11. ¿Cómo ejecutar un script como root en Mac OS X?
- 12. ¿Cómo ejecutar un script como root en Jenkins?
- 13. Obtener todos los usuarios del directorio activo en sharepoint
- 14. ¿Cómo puedo obtener el nombre de inicio de sesión de la red de los usuarios?
- 15. ¿Cómo obtener la ruta del directorio Programas de Inicio?
- 16. Script de PowerShell para obtener un tamaño total de directorio
- 17. MongoDB sólo funciona cuando se ejecuta como root en Ubuntu - tema directorio de datos
- 18. ¿Cambiar el usuario en un script de inicio?
- 19. Directorio de inicio del archivo de proceso por lotes de Windows cuando se ejecuta como administrador
- 20. Cómo obtener el Root raíz
- 21. Cambiar la contraseña de root del script
- 22. Ejecute el programa de Android como root
- 23. Inno Setup: ¿Cómo obtener el directorio de usuario actual cuando se ejecuta el instalador como administrador?
- 24. Iniciar/detener un agente de inicio para todos los usuarios con sesiones de GUI
- 25. ¿Para cambiar el directorio dentro de un script de ruby?
- 26. ¿Cómo obtener intereses de los usuarios?
- 27. Cómo obtener el directorio del script jmeter en Jmeter
- 28. obtener el directorio actual de script php symlink'd y no real script php
- 29. leer el contenido de un directorio utilizando script de shell
- 30. ¿Cómo obtengo el directorio de inicio de los usuarios en Object-C en una aplicación de espacio aislado?
Intenta evitar' eval'. Ver mi respuesta sin 'eval'. –
No necesita el 'eval' aquí. El '~' es la expansión del shell, por lo que 'echo ~ user' es suficiente. – Craig
Sí, necesita 'eval' porque el usuario está almacenado en una variable. – dogbane