Primeiro, remova sua linha sobre o arquivo da área de trabalho de /etc/sudoers
, não é necessário.
Segundo, você configurou o comando exato /home/david/upgrade.sh
para ser executado com NOPASSWD
, não sh -p /home/david/upgrade.sh
, que você tenta executar na janela xterm
. Você deve executar o comando configurado para lucrar com a configuração NOPASSWD
:
xterm -e sudo /home/david/upgrade.sh
A propósito, o shebang do seu arquivo de script especifica /bin/bash
como intérprete, mas você tentou executá-lo com /bin/sh
. O resultado é o mesmo, desde que você não use recursos específicos do Bash, mas deve evitar tais contradições. Isso não tem nada a ver com sudo
e NOPASSWD
.
Como um doce adicional, pode ser bom se você puder chamar seu script diretamente sem sudo
e ele elevar seus privilégios automaticamente se ainda não estiver sendo executado como root. Eu escrevi um pequeno trecho de Bash para esta vez, ele pode simplesmente ser adicionado ao topo de qualquer script Bash que precise ser executado como root:
#!/bin/bash
if test "$(id -u)" -ne 0 ; then
sudo "$0" "$1"
exit $?
fi
Isso testa se o ID de usuário efetivo é 0 (raiz) e, caso contrário, ele executa seu próprio arquivo de script com sudo
e também passa seu código de saída ao terminar. Isso funciona bem em conjunto com uma configuração NOPASSWD
para o arquivo de script.