Atualmente, estou trabalhando em um script bash que instala e configura vários programas em um sistema Linux padrão (atualmente, Ubuntu). Como ele instala programas e copia vários arquivos em várias pastas que exigem privilégios elevados, eu já fiz o padrão "Eu preciso de privilégios elevados" - e sai.
No entanto, eu gostaria, se possível, de solicitar a senha do usuário sudo e elevar os privilégios do script automaticamente se o usuário não executar o comando script com sudo (como iniciá-lo no gerenciador de arquivos da GUI), sem que o usuário precise reiniciar o script.
Como isso foi projetado para ser executado nas instalações padrão do Linux, qualquer opção que modifique o sistema não funcionará para meus propósitos. Todas as opções precisam estar contidas no próprio script.
Isso é possível no Bash? Em caso afirmativo, qual é a melhor maneira (segura, porém concisa) de fazer isso?
Respostas:
Eu corro
sudo
diretamente do script:fonte
Eu sugiro:
fonte
if [[ -t 1 ]];
verifica?Adicione isso como a primeira linha do script:
Mude
sudo
paragksu
ougksudo
se preferir um prompt gráfico.fonte
"$*"
isso mesclará todos os argumentos em um (/path/to/script one two three
resultará em$1
serone two three
) e,$*
sem aspas, irá bagunçar espaços nos argumentos."$@"
funciona direitosudo
, é muito melhor do que usarsu
. Mas se você realmente quer, provavelmenteexec su -c "$0" "$@"
script de exemplo, não me importo de compartilhar:
--ImP.TeK
fonte
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- Parece um forro realmente eficiente! Agradável!$EUDI
, ou sempre o mesmo resultado? Por exemplo,[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"