Come verificare se è stata inserita la password sudo per questa sessione terminale?


16

Come detto nel titolo, devo verificare se la password sudo è stata inserita per questa sessione terminale in una shell (ovvero, se ora ho i diritti sudo).

Se ce l'ho, vorrei fare una cosa e se non ce l'ho, non dovrebbe chiedermelo, lasciami fare un'altra cosa.

Quindi nello pseudo codice sembra così:

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

Ma tutti i comandi che ho trovato per questo mi chiedono sempre la password sudo quando provo a controllare.

L'idea di base è che lo script può (e chiederà) la password sudo in diversi punti, ma non voglio stampare "Lo script chiederà ora la tua password sudo". se è già stato inserito (il che significa che non richiederà la password sudo).

Spero che qualcuno mi possa aiutare.

Risposte:


21

Puoi usare:

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

L' -nopzione (non interattiva) impedisce sudodi richiedere all'utente una password. Se è richiesta una password per l'esecuzione del comando, sudoverrà visualizzato un messaggio di errore (reindirizzato a /dev/null) e verrà chiuso. Se non è richiesta la password, quindi questa espressione è vero: sudo -n true 2>/dev/null.


4
Non aiuta davvero a fare eco a una stringa e confrontarla con un'altra stringa, il codice di uscita di sudo è sufficiente per il test. La prima riga può essereif sudo -n true 2>/dev/null; then
Steven K

@StevenKath Fa la stessa cosa, ma grazie per il suggerimento. Ho migliorato la mia risposta poiché il tuo suggerimento è più elegante.
Radu Rădeanu

2
So che questo è AskUbuntu, ma non funziona in MacOSX, sudo -n restituisce sempre 0, quindi il controllo del codice di ritorno fallisce. Lo dico qui perché ho cercato questo e questa pagina appare su Google.
Normadize

1
Questa è una cattiva idea in quanto invierà la posta al root ogni volta che sarebbe richiesta una password se mail_badpassabilitata nei sudoers.
nyuszika7h
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.