Como usar o sudo com pipelines? [duplicado]

10

Digamos que eu queira adicionar alguma linha ao / etc / profile. Eu tento:

$ sudo echo "something" >> /etc/profile
bash: /etc/profile: Access forbidden

Claro que eu poderia escrever:

$ sudo su
# echo "something" >> /etc/profile

e isso funciona, no entanto, não funciona dentro de um script de shell.

Então, qual é o caminho certo?

    
por ororo 15.12.2012 / 15:09

2 respostas

9

Você pode usar tee :

$ echo "something" | sudo tee -a /etc/profile

Se você omitir o -a (anexar), o arquivo será sobrescrito.

    
por Eric Carvalho 15.12.2012 / 15:37
8

Sua versão:

sudo echo "something" >> /etc/profile

Nesse comando, echo é executado como root, mas o shell que está redirecionando a saída de echo para o arquivo somente raiz ainda está sendo executado como você. É por isso que você está recebendo "Acesso proibido"

Versão de trabalho:

sudo bash -c 'echo "something" >> /etc/profile'

Neste comando, você usa sudo para iniciar um novo shell com privilégios de root e, em seguida, fornece a esse shell toda a cadeia de comando (incluindo o redirecionamento) com a opção -c do bash.

    
por Andy Friese 15.12.2012 / 15:14