आपके प्रश्न का उत्तर देने के लिए, सबसे सटीक रूप से, कोई sudo
भी सार्वभौमिक नहीं माना जाता है। सच में 'सार्वभौमिक' की पूरी अवधारणा, अक्सर एक लाल हेरिंग है। यह विशेष रूप से सच है, क्रॉस-डिस्ट्रो संगतता के संबंध में। एक बार जब आप अलग-अलग सॉफ़्टवेयर संस्करणों की भीड़ में फेंक देते हैं, तो सार्वभौमिकता अर्ध-अवास्तविक हो जाती है। स्वभाव से स्क्रिप्टिंग व्यावहारिक है, अगर यह पांडित्यपूर्ण था, तो पोर्टेबल स्क्रिप्ट लिखना व्यावहारिक रूप से असंभव होगा।
आम तौर पर मैं अपने इच्छित निष्पादन वातावरण, एक अर्ध-आधुनिक लिनक्स वितरण का अनुमान लगाता हूं, मुझे सामान्य जीएनयू यूटिल्स के साथ एक पॉसिक्स शेल की उम्मीद है। ऐसी स्क्रिप्ट के लिए जो लिनक्स से बाहर चल सकती हैं, मैं केवल पूर्ण POSIX मानक की अपेक्षा करता हूं। स्पष्ट रूप से कई स्क्रिप्ट लिनक्स के लिए विशिष्ट हैं, या डिस्ट्रो के लिए विशिष्ट हैं, जिससे अक्सर पोर्टेबिलिटी गुंजाइश होती है।
अपने विशिष्ट स्क्रिप्टिंग केस को संबोधित करने के लिए,
#!/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 शेल तारीफ है, मैं हमेशा डैश संगत लिखता हूं।
sudo
अधिकांश डिस्ट्रोस पर बंडल किया जा सकता है, लेकिन उनमें से सभी इसे चलाने में सक्षम के रूप में प्रत्येक उपयोगकर्ता को कॉन्फ़िगर नहीं करते हैं।