Bagaimana cara memeriksa apakah kata sandi sudo telah dimasukkan untuk sesi terminal ini?

16

Seperti yang disebutkan dalam informasi utama, saya perlu memeriksa apakah kata sandi sudo telah dimasukkan untuk sesi terminal ini dalam sebuah shell (alias, jika saya memiliki hak sudo sekarang).

Jika saya memilikinya, saya ingin melakukan satu hal dan jika saya tidak memilikinya, maka itu seharusnya tidak mendorong saya untuk itu, biarkan saya melakukan hal lain.

Jadi dalam kode pseudo terlihat seperti ini:

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

Tetapi semua perintah yang saya temukan untuk ini selalu meminta saya untuk kata sandi sudo ketika mencoba untuk memeriksa.

Ide dasarnya adalah bahwa skrip dapat (dan akan) meminta kata sandi sudo di beberapa tempat, tetapi saya tidak ingin mencetak "Skrip sekarang akan meminta kata sandi sudo Anda." jika sudah dimasukkan (yang artinya tidak akan meminta kata sandi sudo).

Semoga ada yang bisa membantu saya.

Moonbloom
sumber

Jawaban:

21

Kamu bisa memakai:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

Opsi -n(non-interaktif) mencegah sudodari meminta kata sandi pengguna. Jika kata sandi diperlukan untuk menjalankan perintah, sudoakan menampilkan pesan kesalahan (dialihkan ke /dev/null) dan keluar. Jika password tidak diperlukan, maka ungkapan ini benar: sudo -n true 2>/dev/null.

Radu Rădeanu
sumber
4
Tidak benar-benar membantu untuk menggemakan string dan membandingkannya dengan string lain, kode keluar dari sudo cukup untuk pengujian. Baris pertama bisaif sudo -n true 2>/dev/null; then
Steven K
@ SevenKath Ini melakukan hal yang sama, tapi terima kasih atas sarannya. Saya meningkatkan jawaban saya karena saran Anda lebih elegan.
Radu Rădeanu
2
Saya tahu ini adalah AskUbuntu, tetapi ini tidak berfungsi di MacOSX, sudo -n selalu mengembalikan 0 sehingga memeriksa kode kembali gagal. Saya mengatakan ini di sini karena saya sudah mencari ini dan halaman ini muncul di Google.
Normadize
1
Ini adalah ide yang buruk karena akan mengirim email ke root setiap kali kata sandi diperlukan jika mail_badpassdiaktifkan di sudoers.
nyuszika7h