Sorunuzu en doğru şekilde cevaplamak için sudo
hiçbiri evrensel olarak kabul edilmez. Doğrusu, bütün 'evrensel' kavramı, genellikle kırmızı bir ringa balığıdır. Bu özellikle çapraz dağıtım uyumluluğu açısından doğrudur. Çok sayıda farklı yazılım versiyonuna attığınızda, evrensellik yarı gerçekçi olmaz. Doğası gereği komut dosyası yazmak pragmatiktir, sersemletici olsaydı, taşınabilir komut dosyaları yazmak neredeyse imkansız olurdu.
Normalde amaçlanan uygulama ortamımı ölçtüm, Yarı modern bir Linux dağıtımı, ortak GNU Utils ile bir POSIX kabuğu bekliyorum. Linux dışında çalışan komut dosyaları için yalnızca tam POSIX standardını beklerim. Açıkçası, pek çok komut dosyası Linux'a özgü ya da dağıtıma özgüdür, bu nedenle taşınabilirlik kapsamını daraltır.
Özel komut dosyası durumunuzu ele almak için,
#!/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
Yapıştırılan komut dosyası POSIX kabuk iltifat, ben her zaman Dash uyumlu yazar.
sudo
çoğu dağıtımda paketlenmiş olabilir, ancak hepsi her kullanıcıyı çalıştırabilecek şekilde yapılandırmaz.