Por que uma subshell é necessária para executar alguns comandos? [duplicado]

1

Eu tenho que executar este comando sudo sh -c "echo 'nameserver 8.8.8.8' >> /etc/resolv.conf" para acrescentar uma linha nameserver 8.8.8.8 no arquivo /etc/resolv.conf . Eu sei, isso só seria possível através de subshell.

Minhas perguntas:

  • Isso é possível sem executar o comando em subshell?

  • Em quais casos, um comando deve ser executado em subshell?

por Avinash Raj 29.05.2014 / 20:21

1 resposta

5

sudo echo 'nameserver 8.8.8.8' >> /etc/resolv.conf

falha porque concede permissões elevadas ao comando echo (que não é necessário), mas não ao redirecionamento >> (o que acontece, pois o arquivo de destino é de propriedade do root). Envolver toda a sequência de comandos em sudo sh supera isso.

Você também pode fazer

echo 'nameserver 8.8.8.8' | sudo tee -a /etc/resolv.conf
    
por steeldriver 29.05.2014 / 20:29