¿Cómo verificar si se ha ingresado la contraseña de sudo para esta sesión de terminal?

16

Como se dijo en el título, necesito verificar si la contraseña de sudo se ha ingresado para esta sesión de terminal en un shell (también conocido como, si tengo derechos de sudo ahora).

Si lo tengo, me gustaría hacer una cosa y si no lo tengo, entonces no debería pedirme que lo haga, solo déjame hacer otra cosa.

Entonces en pseudocódigo se ve así:

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

Pero todos los comandos que he encontrado para esto siempre me solicitan la contraseña de sudo cuando intento verificar.

La idea básica es que el script puede (y pedirá) la contraseña de sudo en varios lugares, pero no quiero imprimir "El script ahora le pedirá su contraseña de sudo". si ya se ha ingresado (lo que significa que no solicitará la contraseña de sudo).

Espero que alguien pueda ayudarme.

Flor de luna
fuente

Respuestas:

21

Puedes usar:

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

La -nopción (no interactiva) evita sudoque el usuario solicite una contraseña. Si se requiere una contraseña para que se ejecute el comando, sudomostrará un mensaje de error (redirigido a /dev/null) y saldrá . Si no se requiere la contraseña, entonces esta expresión es verdadera: sudo -n true 2>/dev/null.

Radu Rădeanu
fuente
44
Realmente no ayuda hacer eco de una cadena y compararla con otra cadena, el código de salida de sudo es suficiente para la prueba. La primera línea puede serif sudo -n true 2>/dev/null; then
Steven K
@StevenKath Hace lo mismo, pero gracias por su sugerencia. Mejoré mi respuesta ya que tu sugerencia es más elegante.
Radu Rădeanu
2
Sé que esto es AskUbuntu, pero esto no funciona en MacOSX, sudo -n siempre devuelve 0, por lo que la comprobación del código de retorno falla. Lo digo aquí porque he buscado esto y esta página aparece en Google.
Normadize
1
Esta es una mala idea, ya que enviará correo a la raíz cada vez que se requiera una contraseña si mail_badpassestá habilitada en sudoers.
nyuszika7h