Estoy tratando de asegurarme de que cuando se ejecuta un script, se ejecute como un usuario específico sin tener que llamar a ese usuario antes de ejecutar el script. Además, el script se ejecuta con un par de banderas, por ejemplo
./myscript.sh -e dev -v 1.9
He intentado lo siguiente
[ `whoami` = myuser ] || exec sudo -S su - myuser -c "bash `pwd`/`basename $0` [email protected]"
Pero el indicador -v, que se supone que es una entrada para mi script, se alimenta como entrada a su. Entonces se queja de una opción no válida, ¿hay alguna forma de corregir lo anterior?
NB:la persona que ejecuta el script tiene privilegios de sudo.
Respuesta aceptada:
El usuario actual ya está en la variable $USER
. Así que todo lo que necesitas es:
[ "$USER" = "myuser" ] || sudo -u myuser $0 "[email protected]"
No hay necesidad de sudo su
, sudo
puede hacer todo lo que usted requiere. Tampoco necesita pwd
o basename
, el $0
la variable ya tiene la ruta completa al script.
Su comando original estaba iniciando un shell de inicio de sesión (su -
). Si eso es realmente necesario (lo que parece extraño), puedes hacer:
[ "$USER" = "myuser" ] || sudo -iu myuser $0 "[email protected]"