Como adicionar uma linha ao final de um arquivo que eu possa acessar via sudo?

6

Eu tentei:

sudo "some string" >> test.txt

Mas estou recebendo permissão de aviso negado.

Alguém pode ajudar?

    
por ChrisInCambo 24.09.2009 / 22:46

5 respostas

12

Depende de quanto acesso seu administrador lhe deu via sudo. A resposta mais simples, assumindo que você tem permissão para fazer isso, é rodar "sudo -s" para obter um shell privilegiado e depois fazer o seu

echo somestring >> test.txt

como 'normal'. Se você precisar fazer isso automaticamente:

sudo /bin/sh -c 'echo somestring >> test.txt'

A razão pela qual o que você tem não funcionará (além do fato de você ter deixado o que eu suponho ser um comando "echo") é que o redirecionamento do arquivo acontece no contexto do seu shell e o sudo só se aplica para o comando que você mandou executar.

    
por 24.09.2009 / 22:54
15
% echo "string" | sudo tee -a test.txt
    
por 24.09.2009 / 23:26
13
sudo bash -c "echo 'some string' >> test.txt"

O problema na sua tentativa original é que o "> >" está acontecendo no shell correndo como você; O bash abre o arquivo, não o que está sendo executado pelo sudo. Na minha versão, você está passando o comando inteiro incluindo o redirecionamento para um bash executado pelo sudo.

    
por 24.09.2009 / 22:53
0

Você pode tentar ex -way:

sudo ex +'$put =\"some string\"' -cwq foo.txt

É uma simples edição de arquivos no local e é útil em scripts, para que você não precise fazer canalizações de shell.

    
por 25.05.2015 / 12:15
0

Muitas pessoas recomendam tee para isso, mas não gosto do efeito colateral de escrever para stdout . Uma alternativa é cat :

sh some_script.sh | sudo sh -c 'cat >> somefile.txt'

Se cat tivesse um argumento como tee ' -a flag, isso seria um pouco mais prático:

sh some_script.sh | sudo pseudocat -a somefile.txt

Mas infelizmente isso não acontece.

    
por 10.02.2017 / 00:01