¿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...
a1an
fuente
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
Ignacio Vazquez-Abrams
fuente
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