echo para arquivo com permissão de usuário diferente

0

Estou tentando obter uma gravação em um arquivo por um usuário diferente root , conforme mostrado abaixo. Mas o arquivo é criado e nada é gravado nele.

system("(echo 'ab' | su - root -c "echo 'Logging Enabled' |tee myLog.txt")>/dev/null");

Também tentei > em vez de tee

system("(echo 'ab' | su - root -c "echo 'Logging Enabled' > myLog.txt")>/dev/null");

Existe uma maneira melhor de conseguir isso?

Obrigado

    
por shwink 18.01.2017 / 13:06

1 resposta

3

Não está claro a partir de sua pergunta qual texto você realmente espera que acabe no arquivo.

No shell, você poderia fazer

echo 'ab' | sudo tee myLog.txt

para ter "ab" gravado em myLog.txt e também exibido na saída padrão. O motivo para usar tee é geralmente seu efeito colateral, para que você não precise executar um shell como um usuário privilegiado, e a saída para a saída padrão não é realmente desejada; então você pode adicionar um redirecionamento para suprimir isso.

echo 'ab' | sudo tee myLog.txt >/dev/null

Em um sistema (3) chamada em código C, você pode simplesmente colocar isso em uma string:

system("echo 'ab' | sudo tee myLog.txt >/dev/null");

O que segue é basicamente indefinido:

echo 'ab' | echo 'Logging enabled'

mas normalmente descartará "ab" porque o segundo echo não faz nada com ele e, em vez disso, produz sua própria saída. Se você quiser combinar duas partes do texto, tente algo como

printf "%s\nLogging enabled\n" "$(echo ab)"

mas, novamente, não está claro o que e como você deseja fazer com as duas declarações echo separadas.

(Para reiterar o óbvio, a | b conecta a saída padrão de a à entrada padrão de b e executa os dois processos em paralelo, com a entrada padrão ainda conectada à entrada padrão de a e saída padrão proveniente de b .)

    
por 18.01.2017 / 13:35