Để trả lời câu hỏi của bạn, chính xác nhất, không sudo
được coi là phổ quát. Thực ra toàn bộ khái niệm 'phổ quát', thường là cá trích đỏ. Điều này đặc biệt đúng, liên quan đến khả năng tương thích chéo. Một khi bạn ném vào vô số phiên bản phần mềm khác nhau, tính phổ quát sẽ trở nên phi thực tế. Viết kịch bản tự nhiên là thực dụng, nếu nó mang tính mô phạm, việc viết các kịch bản di động thực tế là không thể.
Thông thường tôi đánh giá môi trường thực thi dự định của mình, Bản phân phối Linux bán hiện đại, tôi mong đợi trình bao POSIX với các Ứng dụng GNU phổ biến. Đối với các tập lệnh có thể chạy bên ngoài Linux, tôi chỉ mong đợi tiêu chuẩn POSIX đầy đủ. Rõ ràng nhiều tập lệnh dành riêng cho Linux, hoặc dành riêng cho bản phân phối, do đó thường thu hẹp phạm vi tính di động.
Để giải quyết trường hợp kịch bản cụ thể của bạn,
#!/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
kịch bản được dán đó là lời khen của POSIX shell, tôi luôn viết Dash tương thích.
sudo
có thể được gói trên hầu hết các bản phát hành, nhưng không phải tất cả chúng đều cấu hình mọi người dùng có khả năng chạy nó.