Toho lze dosáhnout velmi snadno:
#!/bin/sh
[ "$(whoami)" != "root" ] && exec sudo -- "$0" "[email protected]"
Když aktuální uživatel není root, spusťte skript znovu pomocí sudo .
Všimněte si, že používám sudo zde místo su . To proto, že umožňuje zachovat argumenty. Pokud používáte su , váš příkaz by musel být su -c "$0 [email protected]" což by poškodilo vaše argumenty, pokud mají mezery nebo speciální znaky shellu.
Pokud je váš shell bash, můžete se vyhnout externímu volání na whoami :
(( EUID != 0 )) && exec sudo -- "$0" "[email protected]"
Můžete také zkontrolovat UID:
if [ $(id -u) != 0 ]; then
echo "You're not root"
# elevate script privileges
fi
Můžete zavolat samotný skript a zkontrolovat:
#! /bin/bash
if [ "root" != "$USER" ]; then
su -c "$0" root
exit
fi
...