Executar no shell de raiz a partir de um script bash de usuário

0

Eu tenho um script que, entre outras coisas, precisa fazer algumas coisas como root, como criar uma pasta de montagem. Eu tentei:

echo "Linux user password is needed in order to ..."
sudo -s
# also tried:
# sudo su
... code that requires root permission
exit
... code that requires user permission

O problema é que o script pára após o "sudo -s" e continua somente depois que eu sair manualmente do shell de root criado automaticamente.

Existe uma maneira de executar comandos do shell root dentro de um script de usuário?

Obrigado.

    
por AlikElzin-kilaka 17.10.2011 / 18:56

2 respostas

3

Sim, desde coisas como

sudo mkdir /mnt/mymountpoint

funciona, você pode fazer

sudo ./myrootscript.sh

e se você verificar os parâmetros adequados, seu script pode se chamar novamente, então você teria apenas um arquivo.

    
por 17.10.2011 / 19:30
1

Você está usando apenas sudo e su de maneira errada. Se você escrever apenas sudo -s ou sudo su sozinho, você terminará com um shell interativo criado dentro do script - isto é o que esses comandos fazem .

Já que você precisa de um pedaço de código shell para ser executado como root, você precisa envolvê-lo de alguma forma em um único comando. Provavelmente, a maneira mais simples é usar um subshell explícito:

echo "Linux user password is needed in order to ..."
sudo sh -c '
 ... code that requires root permission
'

Isso, é claro, causará problemas quando você tentar usar algumas variáveis definidas em outro lugar em seu script - nesse caso, use aspas duplas em vez de simples.

Mas se você tiver apenas vários comandos para serem executados como root, use melhor sudo na frente de cada um deles.

    
por 17.10.2011 / 20:00

Tags