Você não pode usar sudo
dessa maneira. O script lhe daria um shell root interativo e pausaria até você sair do shell. Em seguida, ele executaria os comandos restantes no script sem root
privileges.
Se o seu script somente fizer coisas que requeiram root
privileges, execute o script inteiro com sudo
:
$ sudo ./myscript.sh
O script seria parecido com
#!/bin/bash
curl -L https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-'uname -s'-'uname -m' > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
(Nota: na verdade, eu não olhei para ver o que esses comandos realmente fazem)
Caso contrário, e esta é apenas uma opinião pessoal, pode ser uma boa ideia dividir os root
bits do script e colocá-los em scripts próprios, pelo menos se forem tarefas comuns.
#!/bin/bash
# script that does things as an ordinary user
# ...
sudo "$HOME/admin_tasks/do_docker_stuff.sudo"
# rest of script
# ...
Ou você pode fazer o que todo mundo parece estar fazendo e prefixar todas as linhas do script com sudo
. Nesse caso, ele falharia, já que há um redirecionamento na primeira linha que precisa de root
privileges, então você "conserta" usando sudo bash -c " ... > ... "
, transformando o script legível e agradável em uma bagunça de confusão (novamente, apenas uma opinião pessoal).
Depois de pensar um pouco: Esse não é um script longo, portanto, fazer várias chamadas sudo
no script pode não ser uma ideia tão ruim, mas podemos deixar a invocação de curl
fora de sudo
:
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
chmod a+x ./docker-compose
sudo mv ./docker-compose /usr/local/bin/docker-compose
sudo chown root:root /usr/local/bin/docker-compose
Esses três últimos comandos poderiam ser colocados em um script do_local-bin_install.sudo
(para reutilização por outros scripts):
#!/bin/bash
binary="$1"
chmod a+x "$binary"
chown root:root "$binary"
mv -i "$binary" /usr/local/bin/
que poderíamos chamar do nosso script:
#!/bin/bash
curl -L -o ./docker-compose "https://github.com/docker/compose/releases/download/1.10.0-rc2/docker-compose-$(uname -s)-$(uname -m)"
sudo ./do_local-bin_install.sudo ./docker-compose
Desculpe, este foi um tipo de fluxo de resposta da consciência. Espero que alguém considere compreensível.