O que aconteceu depois do sudo -s [duplicado]

1

Eu sou novo no shell.

Eu estou escrevendo um script muito básico:

#!/bin/bash
example()
{

    echo "Code that don't need sudo."
    sudo -s 
    echo "Code that need sudo"
 }

example

Depois de executar este script, espero:

  1. prompt Code that don't need sudo.

  2. shell me pergunta senha

  3. se a senha for OK, clique em Code that need sudo.

Mas depois de digitar a boa senha, o prompt Code that need sudo. não aparece por que e como corrigir isso?

    
por Mouin 02.03.2017 / 22:11

2 respostas

3

Isso porque sudo -s inicia um shell de root e é aí que você se encontra depois de digitar a senha. Se você sair do shell, verá o Code that need sudo :

$ foo.sh
Code that don't need sudo.
[sudo] password for terdon: 
[root@tpad terdon]# exit
Code that need sudo

Em geral, em todos os scripts, quando você diz para executar um comando, o script só continuará sendo executado após o término do comando. Então, quando seu script lançou sudo -s , ele esperou que isso terminasse antes de continuar. É por isso que o texto foi impresso depois que executei exit (ou pressionei ctrl + D ).

    
por 02.03.2017 / 22:30
3

-s sem um comando executa um shell interativo, assim você não estará mais no mesmo shell que o script.

Veja man sudo para detalhes.

Isso deve funcionar:

#!/bin/bash
example()
{

    echo "Code that don't need sudo."
    sudo -s echo "Code that need sudo"
 }

example
    
por 02.03.2017 / 22:29

Tags