]> CyberLeo.Net >> Repos - CDN/shlib.git/blob - lib/sh/reexec.sh
Add reexec scriptlet to exec things via sudo/su
[CDN/shlib.git] / lib / sh / reexec.sh
1 # reexec library script
2
3 if [ -z "${__reexec_sh_loaded}" ]
4 then
5   __reexec_sh_loaded=yes
6   
7   # exec a command via sudo/su
8   # Can be used to reexec this process, if run like this from the top-level:
9   #  reexec "${0}" "${@}"
10   # Specify target user name with -u as the first parameter
11   #  reexec -u user "${0}" "${@}"
12   reexec() {
13     user="root"
14     # Set name if user provided
15     if [ "${1}" = "-u" ]
16     then
17       user="${2}"
18       shift 2
19     fi
20     
21     # reexec if needed
22     if [ "$(id -un)" != "${user}" ]
23     then
24       # Find a su/sudo
25       cmd="sudo -u ${user}"
26       [ -x "$(which sudo 2>/dev/null)" ] || cmd="su ${user} -c"
27       exec ${cmd} "${@}"
28     fi
29   }
30 fi