Esto es muy fácil de lograr:
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "[email protected]"
Cuando el usuario actual no sea root, vuelva a ejecutar el script a través de sudo
.
Tenga en cuenta que estoy usando sudo
aquí en lugar de su
. Esto se debe a que le permite conservar argumentos. Si usa su
, su comando tendría que ser su -c "$0 [email protected]"
lo que destrozaría sus argumentos si tienen espacios o caracteres especiales de shell.
Si su shell es bash, puede evitar la llamada externa a whoami
:
(( EUID != 0 )) && exec sudo -- "$0" "[email protected]"
También puede comprobar el UID:
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
Puede llamar al propio script y comprobar:
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...