#!/bin/bash # $0 is visible globally, in functions too # apparently su -c accepts a command and 1 argument, hence we export CMDL_ARGS=$@ export CMDL_ARGS chk_root() { if [[ ! $(id -u) -eq 0 ]]; then echo "root user required"; # exec works similar to fork() exec su -c "\"$0\" $CMDL_ARGS" exit $? fi } chk_root $@ if [[ $(id -u) -eq 0 ]]; then echo "you're root" fi