Es sieht so aus, als ob sudo -n
unter Mac OS X (10.10.3) immer 0 als Rückgabecode zurückgegeben wird.
So etwas wie das hier zeigt also immer 0 an, unabhängig davon, ob sich der Benutzer zuerst mit seinem Passwort authentifiziert hat:
sudo -n true &> /dev/null ; echo $?
Falls der Benutzer nicht über eine gültige Sudo-Sitzung verfügt, würde ich als Exit-Code eine 1 erwarten, unter OS X wird jedoch immer eine 0 zurückgegeben.
Ich frage, weil ich gesehen habe, dass dieses Muster zur Überprüfung auf Sudo-Zugriff vorgeschlagen wird, z. B. hier:https://superuser.com/a/587876/119764
Was ist dieoffiziell(???) Verhalten von sudo -n
? Unterscheidet es sich je nach Version oder Betriebssystem oder übersehe ich etwas?
Antwort1
Ich habe das gleiche Problem. Siehe Manpage,
Andernfalls wird sudo mit einem Exit-Wert von 1 beendet, wenn ein Konfigurations-/Berechtigungsproblem vorliegt oder wenn sudo den angegebenen Befehl nicht ausführen kann. Im letzteren Fall wird die Fehlerzeichenfolge auf stderr ausgegeben. Wenn sudo einen oder mehrere Einträge im PATH des Benutzers nicht mit stat(2) ausführen kann, wird ein Fehler auf stderr ausgegeben. (Wenn das Verzeichnis nicht existiert oder es sich nicht wirklich um ein Verzeichnis handelt, wird der Eintrag ignoriert und kein Fehler ausgegeben.) Dies sollte unter normalen Umständen nicht passieren. Der häufigste Grund dafür, dass stat(2) „Berechtigung verweigert“ zurückgibt, ist, wenn Sie einen Automounter ausführen und sich eines der Verzeichnisse in Ihrem PATH auf einer Maschine befindet, die derzeit nicht erreichbar ist.
Es scheint sich also um einen Fehler in OS X zu handeln.
Antwort2
Nachdem ich die Sudo-Manpage immer wieder gelesen hatte, überprüfte ich BugzillaHier. Dieses Verhalten von sudo ist ein Fehler, der in 1.7.10 nach dem Zusammenführen aus einem 1.8-Zweig auftrat.
Wenn Sie Ihre „Berechtigungen“ überprüfen möchten sudo -n command &>/dev/null ; echo $?
, stellen Sie sicher, dass Sie über Sudo in der Version 1.7.9b1 oder früher verfügen.