Eu corro sudo
diretamente do script:
if [ $EUID != 0 ]; then
sudo "$0" "$@"
exit $?
fi
Atualmente, estou trabalhando em um script básico que instala e configura vários programas em um sistema Linux padrão (atualmente, Ubuntu). Como ele instala programas e copia vários arquivos para várias pastas que exigem privilégios elevados, já fiz o padrão "Preciso de privilégios elevados" e saída.
No entanto, gostaria, se possível, de poder solicitar ao usuário sua senha sudo e elevar automaticamente os privilégios do script se o usuário não executasse o comando de script com o sudo (por exemplo, ativá-lo a partir do arquivo GUI gerente), sem que o usuário precise reiniciar o script.
Como isso é projetado para ser executado em instalações Linux, qualquer opção que modifique o sistema não funcionará para os meus propósitos. Todas as opções precisam estar contidas no próprio script.
Isso é possível no Bash? Se sim, qual é a melhor maneira (segura, mas concisa) de fazer isso?
Adicione isso como a primeira linha do script:
[ "$UID" -eq 0 ] || exec sudo bash "$0" "$@"
Altere sudo
para gksu
ou gksudo
se você preferir um prompt gráfico.
Sugiro:
#!/bin/bash
if (($EUID != 0)); then
if [[ -t 1 ]]; then
sudo "$0" "$@"
else
exec 1>output_file
gksu "$0 $@"
fi
exit
fi
# some example stuff
ls -l /root
echo "app: $0"
for f; do
echo ">$f<"
done
script de exemplo eu não me importo de compartilhar ::
#!/bin/bash
[ "$UID" -eq 0 ] || exec sudo "$0" "$@" && echo -n "sudo bash what: "
read WHAT
sudo $WHAT
- IMP.TeK