¿Cómo cambiar / cambiar la identificación de usuario dentro de un script bash para ejecutar comandos en el mismo script?


10

¿Hay una manera de cambiar la identidad del usuario dentro de un script (ejecutado como root como parte de un proceso de instalación) para ejecutar algunos comandos sin llamar a un script externo, luego regresar a root para ejecutar otros comandos?

Tipo de

#!/bin/bash
some commands as root
SWITCH_USER_TO user
some commands as user including environment variables checks, without calling an external script
SWITCH_USER_BACK
some other stuff as root, maybe another user id change...


Deberías echar un vistazo a esta respuesta. stackoverflow.com/a/17758312/1243547
Klaus

Respuestas:


23

No. Pero puedes usar sudo para ejecutar un shell y utilizar un heredoc para alimentar los comandos.

#!/bin/bash
whoami
sudo -u someuser bash << EOF
echo "In"
whoami
EOF
echo "Out"
whoami

Esto seguramente hace el trabajo de mantener las cosas juntas en el mismo script y también puede usar la sustitución de comandos si todo está envuelto con el corchete de cierre una línea después de EOF
a1an

Esta respuesta es mejor que todas las respuestas en La pregunta que esta duplica. .
Dan Dascalescu

Casi me pregunto, si tuviera que hacer esto, no usaría EOF, y en cambio cambiaría el nombre de heredoc a SUDO. De esa manera recordaría que estoy corriendo como superusuario dentro del código que lo contiene.
Joe Heyming

Por alguna razón, parece que al establecer vars en el comando heredoc, los vars no están configurados. Si lo intento BLA="something" y luego, por ejemplo: echo "In: $BLA"parece que BLA está vacío
Efren
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.