Dies ist sehr einfach zu bewerkstelligen:
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "[email protected]"
Wenn der aktuelle Benutzer nicht root ist, führen Sie das Skript über sudo
erneut aus .
Beachten Sie, dass ich sudo
verwende hier statt su
. Dies liegt daran, dass Sie Argumente beibehalten können. Wenn Sie su
verwenden , müsste Ihr Befehl su -c "$0 [email protected]"
lauten was Ihre Argumente verstümmeln würde, wenn sie Leerzeichen oder spezielle Shell-Zeichen enthalten.
Wenn Ihre Shell bash ist, können Sie den externen Aufruf von whoami
vermeiden :
(( EUID != 0 )) && exec sudo -- "$0" "[email protected]"
Sie können auch die UID überprüfen:
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
Sie können das Skript selbst aufrufen und Folgendes überprüfen:
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...