Como colocar comandos em um arquivo bash que normalmente requer login no shell?

2

Primeiro de tudo, eu sou totalmente novo neste mundo Linux. Então, por favor, considere isso quando você lê. Eu tenho um 10 a 20 linhas de código bash que eu preciso executar periodicamente. Agora, ontem, eu tenho tentado colocar essas linhas em um único arquivo bash para que eu possa executá-las em um único comando. Mas fiquei preso em um ponto, porque o código contém algumas operações que só podem ser executadas com um login do shell, como 'cd / root', por exemplo. Agora, toda vez que eu executo, eu preciso logar em um shell usando 'sudo -s' depois de algum ponto. Aqui está uma parte dos meus códigos.

cd ~
cp -Rf $worthy_folders /root/
sudo -s
cd /root
sudo chown -R root:root $worthy_folders

Obviamente, não posso escrevê-los em um arquivo bash como eles são. Isso só me pede senha e precisa pressionar vários enter. E também o 'sudo cd' não funciona. Então, minha pergunta é, existe uma maneira de escrever esses comandos em um único arquivo bash e apenas executá-los?

    
por Prativasic 05.10.2011 / 10:05

1 resposta

2

Você pode colocar tudo em um arquivo, digamos myscript.sh , e depois executar tudo com o sudo:

$ sudo myscript.sh

Dessa forma, o sudo acontece antes de qualquer script. Se isso não for aceitável, então você pode fazer com que o sudo execute alguns comandos por vez:

$ sudo bash -c "cd /root; chown -R root:root $worthy_folders"

Isso não é muito diferente, mas pelo menos você pode ter um pequeno subconjunto de comandos executados com privilégios elevados em vez de todos os comandos.

E apenas como uma dica - sim, é chato ser solicitado no meio de um script por uma senha, e se houver uma possibilidade de uma condição de corrida, pode ser perigoso. Você pode fazer com que o sudo o valide chamando-o com o sinalizador -v. Isso solicitará sua senha, se necessário, e redefinirá o registro de data e hora para reiniciar o tempo limite especificado em seu arquivo sudoers.

    
por 05.10.2011 / 11:57