Untuk menjawab pertanyaan Anda, paling akurat, sudo
tidak dianggap tidak universal. Sejujurnya seluruh konsep 'universal', seringkali menjadi ikan haring merah. Ini terutama benar, berkenaan dengan kompatibilitas lintas-distro. Setelah Anda melemparkan banyak versi perangkat lunak yang berbeda, universalitas menjadi semi-realistis. Scripting pada dasarnya adalah pragmatis, jika itu bertele-tele, menulis skrip portabel praktis tidak mungkin.
Biasanya saya mengukur lingkungan yang ingin saya jalankan, distribusi semi-modern Linux, saya mengharapkan shell POSIX dengan GNU Utils yang umum. Untuk skrip yang dapat berjalan di luar Linux, saya hanya mengharapkan standar POSIX penuh. Jelas banyak skrip yang khusus untuk Linux, atau khusus untuk distro, sehingga sering mempersempit ruang lingkup portabilitas.
Untuk mengatasi kasus skrip spesifik Anda,
#!/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
script yang ditempelkan adalah pujian shell POSIX, saya selalu menulis Dash yang kompatibel.
sudo
mungkin dibundel pada sebagian besar distro, tetapi tidak semua dari mereka mengkonfigurasi setiap pengguna sebagai mampu menjalankannya.