Saat ini saya sedang mengerjakan skrip bash yang menginstal dan mengatur berbagai program pada sistem Linux persediaan (saat ini, Ubuntu). Karena menginstal program dan menyalin sejumlah file ke berbagai folder yang memerlukan hak-hak tinggi, saya sudah melakukan standar "Saya perlu hak-hak istimewa tinggi" -dan-keluar.
Namun, saya ingin, jika mungkin, dapat meminta pengguna untuk kata sandi sudo mereka dan meningkatkan hak istimewa skrip secara otomatis jika pengguna tidak menjalankan perintah skrip dengan sudo (seperti meluncurkannya dari file manager GUI), tanpa pengguna harus memulai ulang skrip.
Karena ini dirancang untuk berjalan pada instalasi Linux biasa, opsi apa pun yang memodifikasi sistem tidak akan berfungsi untuk tujuan saya. Semua opsi perlu dimasukkan ke skrip itu sendiri.
Apakah ini mungkin di dalam Bash? Jika demikian, apa cara terbaik (aman, namun ringkas) untuk melakukan ini?
Jawaban:
Saya menjalankan
sudo
langsung dari skrip:sumber
Saya menyarankan:
sumber
if [[ -t 1 ]];
memeriksa?Tambahkan ini sebagai baris pertama skrip:
Ubah
sudo
kegksu
ataugksudo
jika Anda lebih suka prompt grafis.sumber
"$*"
akan menggabungkan semua argumen menjadi satu (/path/to/script one two three
akan menghasilkan$1
menjadione two three
), dan$*
tanpa tanda kutip akan mengacaukan spasi dalam argumen."$@"
berfungsi dengan benarsudo
, jauh lebih baik daripada menggunakansu
. Tetapi jika Anda benar-benar ingin, mungkinexec su -c "$0" "$@"
contoh skrip saya tidak bisa berbagi ::
--ImP.TeK
sumber
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- Sepertinya liner yang benar-benar efisien! Bagus!$EUDI
,, atau selalu hasil yang sama? Misalnya,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"