Para responder a su pregunta, más exactamente, no sudo
no se considera universal. A decir verdad, todo el concepto de 'universal' es a menudo una pista falsa. Esto es especialmente cierto con respecto a la compatibilidad de distribución cruzada. Una vez que te lanzas a la multitud de diferentes versiones de software, la universalidad se vuelve poco realista. El guión por naturaleza es pragmático, si fuera pedante, escribir guiones portátiles sería prácticamente imposible.
Normalmente calculo mi entorno de ejecución previsto, una distribución de Linux semi-moderna, espero un shell POSIX con las utilidades GNU comunes. Para los scripts que podrían ejecutarse fuera de Linux, solo espero el estándar POSIX completo. Obviamente, muchos scripts son específicos de Linux, o específicos de la distribución, por lo que a menudo se reduce el alcance de la portabilidad.
Para abordar su caso específico de secuencias de comandos,
#!/bin/sh
## Exit Point
die() {
[ -n "$2" ] && echo "$2"
exit $1
}
## Require SuperUser Execution, Otherwise Re-Execute
[ `id -u` -ne 0 ] && {
command -v lsb_release > /dev/null && {
DISTRO="`lsb_release -is`"
[ "$DISTRO" = "Ubuntu" ] && SUPERUSER='sudo'
}
SUPERUSER="${SUPERUSER:-su}"
case "$SUPERUSER" in
su)
su -c "$0"
;;
sudo)
sudo "$0"
;;
esac
}
## Require SuperUser Execution
[ `id -u` -ne 0 ] && die 78
echo 'Script Executed by UID'
id -u
## Clean Up
die 0
ese script pegado es un complemento de shell POSIX, siempre escribo Dash compatible.
sudo
puede estar incluido en la mayoría de las distribuciones, pero no todas configuran a cada usuario como capaz de ejecutarlo.