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.

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.