Não é muito bonito, mas curta a análise de sudo -l
enquanto você está fazendo. Eu não sei uma alternativa: simplesmente execute seu comando com a opção -n
:
The
-n
(non-interactive) option prevents sudo from prompting the user for a password. If a password is required for the command to run, sudo will display an error message and exit.
Exemplo:
me$ sudo -l
User me may run the following commands on this host:
(ALL) NOPASSWD: /usr/bin/vim
(ALL) /usr/bin/nano
me$ sudo -n nano /etc/hosts
sudo: a password is required
me$ echo $?
1
me$ sudo -n vim /etc/hosts
# :q
me$ echo $?
0
Problema com isto é que você não pode dizer diretamente do código de saída se sudo
falhou porque exigiu uma senha, ou se o comando que você executou falhou. Então você precisará analisar a saída. (Felizmente a mensagem de erro é estática, então isso não deve ser muito difícil. Cuidado com a localização.)