Como verificar se a senha do sudo foi inserida para esta sessão do terminal?

16

Como dito no título, preciso verificar se a senha do sudo foi inserida para esta sessão do terminal em um shell (ou seja, se eu tenho direitos do sudo agora).

Se eu tiver, gostaria de fazer uma coisa e, se não a tiver, não deve me pedir, deixe-me fazer outra.

Portanto, no pseudo-código, fica assim:

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

Mas todos os comandos que encontrei para isso sempre solicitam a senha do sudo ao tentar verificar.

A idéia básica é que o script possa (e irá) solicitar a senha do sudo em vários locais, mas não quero imprimir "O script agora solicitará a sua senha do sudo". se já tiver sido digitado (o que significa que não solicitará a senha do sudo).

Espero que alguém possa me ajudar.

Moonbloom
fonte

Respostas:

21

Você pode usar:

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

A opção -n(não interativa) impede sudosolicitar uma senha ao usuário. Se uma senha for necessária para a execução do comando, sudoserá exibida uma mensagem de erro (redirecionada para /dev/null) e sair. Se a senha não é necessária, então esta expressão é verdadeira: sudo -n true 2>/dev/null.

Radu Rădeanu
fonte
4
Realmente não ajuda ecoar uma string e compará-la com outra, o código de saída do sudo é suficiente para o teste. A primeira linha pode serif sudo -n true 2>/dev/null; then
Steven K
@StevenKath Faz a mesma coisa, mas obrigado pela sugestão. Melhorei minha resposta, pois sua sugestão é mais elegante.
Radu Rădeanu
2
Eu sei que é o AskUbuntu, mas isso não funciona no MacOSX, o sudo -n sempre retorna 0, portanto, a verificação do código de retorno falha. Estou dizendo isso aqui porque pesquisei e esta página aparece no Google.
Normadize
11
É uma péssima idéia, pois ele enviará emails para o root sempre que uma senha for necessária se mail_badpassestiver ativada nos sudoers.
precisa saber é o seguinte