C'est très simple à réaliser :
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "[email protected]"
Lorsque l'utilisateur actuel n'est pas root, ré-exécutez le script via sudo
.
Notez que j'utilise sudo
ici au lieu de su
. En effet, cela vous permet de conserver les arguments. Si vous utilisez su
, votre commande devrait être su -c "$0 [email protected]"
ce qui altérerait vos arguments s'ils avaient des espaces ou des caractères shell spéciaux.
Si votre shell est bash, vous pouvez éviter l'appel externe à whoami
:
(( EUID != 0 )) && exec sudo -- "$0" "[email protected]"
Vous pouvez également vérifier l'UID :
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
Vous pouvez appeler le script lui-même et vérifier :
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...