เพื่อตอบคำถามของคุณอย่างแม่นยำที่สุดsudo
ไม่ถือว่าเป็นสากล ความจริงแล้วแนวคิดทั้งหมดของ 'สากล' มักเป็นปลาเฮอริ่งแดง นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งในเรื่องความเข้ากันได้ข้ามทาง เมื่อคุณทุ่มซอฟต์แวร์เวอร์ชั่นที่แตกต่างกันมากมายความเป็นสากลจะไม่สมจริง การเขียนสคริปต์ตามธรรมชาตินั้นเป็นสิ่งที่สามารถนำไปใช้ได้จริงหากเป็นเรื่องอื้อฉาว
โดยปกติฉันวัดสภาพแวดล้อมการปฏิบัติการที่ตั้งใจไว้การกระจาย Linux แบบกึ่งสมัยใหม่ฉันคาดว่า POSIX เชลล์พร้อมกับ GNU Utils ทั่วไป สำหรับสคริปต์ที่สามารถทำงานนอก Linux ได้ฉันคาดหวังว่าจะได้มาตรฐาน POSIX แบบเต็มเท่านั้น เห็นได้ชัดว่าสคริปต์จำนวนมากมีเฉพาะกับ Linux หรือเฉพาะกับ distro ดังนั้นจึงมัก จำกัด ขอบเขตการพกพาให้แคบลง
เพื่อระบุกรณีการเขียนสคริปต์เฉพาะของคุณ
#!/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
อาจรวมอยู่ใน distros ส่วนใหญ่ แต่ไม่ใช่ทั้งหมดที่กำหนดค่าผู้ใช้ทุกคนที่สามารถเรียกใช้ได้