Wie überprüfe ich, ob für diese Terminalsitzung ein Sudo-Passwort eingegeben wurde?

15

Wie in der Überschrift erwähnt, muss ich überprüfen, ob das Sudo-Passwort für diese Terminalsitzung in einer Shell eingegeben wurde (auch bekannt als, wenn ich jetzt Sudo-Rechte habe).

Wenn ich es habe, möchte ich etwas tun und wenn ich es nicht habe, sollte es mich nicht dazu auffordern, lass mich einfach etwas anderes tun.

Im Pseudocode sieht das also so aus:

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

Aber alle Befehle, die ich dafür gefunden habe, fordern mich immer zur Eingabe des sudo-Passworts auf, wenn ich versuche, es zu überprüfen.

Die Grundidee ist, dass das Skript an mehreren Stellen nach dem Sudo-Passwort fragen kann (und wird), aber ich möchte nicht ausdrucken: "Das Skript fragt jetzt nach Ihrem Sudo-Passwort." wenn es bereits eingegeben wurde (was bedeutet, dass Sie nicht nach dem sudo-Passwort gefragt werden).

Hoffe mir kann jemand helfen.

Mondblüte
quelle

Antworten:

20

Sie können verwenden:

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

Die -n(nicht interaktive) Option verhindert, dass sudoder Benutzer zur Eingabe eines Kennworts aufgefordert wird. Wenn für die Ausführung des Befehls ein Kennwort erforderlich ist, sudowird eine Fehlermeldung angezeigt (umgeleitet an /dev/null) und das Programm beendet. Wenn das Kennwort nicht erforderlich ist, dann ist dieser Ausdruck wahr: sudo -n true 2>/dev/null.

Radu Rădeanu
quelle
4
Es hilft nicht wirklich, eine Zeichenfolge zu wiederholen und mit einer anderen Zeichenfolge zu vergleichen. Der Exit-Code von sudo reicht für den Test aus. Die erste Zeile kann seinif sudo -n true 2>/dev/null; then
Steven K
@StevenKath Es macht das gleiche, aber danke für den Vorschlag. Ich habe meine Antwort verbessert, da Ihr Vorschlag eleganter ist.
Radu Rădeanu
2
Ich weiß, dass dies AskUbuntu ist, aber dies funktioniert unter MacOSX nicht. Sudo -n gibt immer 0 zurück, sodass die Überprüfung des Rückkehrcodes fehlschlägt. Ich sage das hier, weil ich danach gesucht habe und diese Seite in Google erscheint.
Normadize
1
Dies ist eine schlechte Idee, da jedes Mal, wenn mail_badpassin sudoers ein Kennwort erforderlich ist , E-Mails an root gesendet werden.
nyuszika7h