Чтобы ответить на ваш вопрос, наиболее точно, sudo
не считается универсальным. По правде говоря, все понятие «универсальный» часто представляет собой красную сельдь. Это особенно верно в отношении кросс-дистрибутивной совместимости. Как только вы добавите множество различных версий программного обеспечения, универсальность станет полуреалистичной. Сценарии по своей природе прагматичны, если бы они были педантичными, написание переносимых сценариев было бы практически невозможно.
Обычно я измеряю свою предполагаемую среду исполнения, полу-современный дистрибутив Linux, ожидаю POSIX-оболочку с обычными утилитами GNU. Для сценариев, которые могут работать за пределами Linux, я ожидаю только полного стандарта POSIX. Очевидно, что многие скрипты специфичны для Linux или дистрибутива, поэтому часто сужают область переносимости.
Чтобы рассмотреть ваш конкретный сценарий,
#!/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
этот вставленный скрипт является комплиментом оболочки POSIX, я всегда пишу Dash-совместимый.
sudo
может поставляться в большинстве дистрибутивов, но не все из них настраивают каждого пользователя как способного его запустить.