Comment vérifier si le mot de passe sudo a été saisi pour cette session de terminal?

16

Comme dit dans le titre, je dois vérifier si le mot de passe sudo a été entré pour cette session de terminal dans un shell (aka, si j'ai maintenant les droits sudo).

Si je l'ai, je voudrais faire une chose et si je ne l'ai pas, alors cela ne devrait pas me le demander, laissez-moi simplement faire autre chose.

Donc, dans le pseudo code, cela ressemble à ceci:

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

Mais toutes les commandes que j'ai trouvées pour cela m'invitent toujours à saisir le mot de passe sudo lors de la vérification.

L'idée de base est que le script peut (et demandera) le mot de passe sudo à plusieurs endroits, mais je ne veux pas imprimer "Le script demandera maintenant votre mot de passe sudo." s'il a déjà été entré (ce qui signifie qu'il ne demandera pas le mot de passe sudo).

J'espère que quelqu'un pourra m'aider.

Moonbloom
la source

Réponses:

21

Vous pouvez utiliser:

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

L' -noption (non interactive) empêche sudod'inviter l'utilisateur à saisir un mot de passe. Si un mot de passe est requis pour l'exécution de la commande, sudoaffichera un message d'erreur (redirigé vers /dev/null) et quittera. Si le mot de passe n'est pas nécessaire, cette expression est vraie: sudo -n true 2>/dev/null.

Radu Rădeanu
la source
4
Cela n'aide pas vraiment à faire écho à une chaîne et à la comparer à une autre chaîne, le code de sortie de sudo suffit pour le test. La première ligne peut êtreif sudo -n true 2>/dev/null; then
Steven K
@StevenKath Il fait la même chose, mais merci pour la suggestion. J'ai amélioré ma réponse car votre suggestion est plus élégante.
Radu Rădeanu
2
Je sais que c'est AskUbuntu, mais cela ne fonctionne pas sous MacOSX, sudo -n renvoie toujours 0, donc la vérification du code retour échoue. Je dis cela ici parce que j'ai cherché cela et cette page apparaît dans Google.
Normadize
1
C'est une mauvaise idée car il enverra du courrier à root à chaque fois qu'un mot de passe sera requis s'il mail_badpassest activé dans sudoers.
nyuszika7h