Como adicionar uma linha a um arquivo que tenha apenas permissão de gravação root e continuar a execução do script

8

Estou tentando aprender scripts de bash. Eu estou trabalhando em um problema prático e em um ponto eu preciso adicionar uma linha para um arquivo que requer root permissão para escrever.

O código é assim:

# some code
echo "add this line to the code" >> fileName
# some code

É possível, de alguma forma, fazer o script pedir a senha de root, validar a senha e, ao autenticar com sucesso, modificar o arquivo? O script deve então retornar ao modo de usuário e continuar a execução do comando.

    
por Alex 04.05.2012 / 05:08

5 respostas

10

Há uma dica na página sudo man, que explica como fazer algo assim. Aqui está o meu one-liner:

#!/usr/bin/bash
sudo sh -c "echo \"add this line to the code\" >> fileName"

Obviamente, primeiro você precisa configurar seu usuário para ter sudo privileges. O shell sh é usado devido ao redirecionamento para o arquivo de propriedade da raiz. Eu também tive que escapar das aspas usadas para o comando echo .

    
por 04.05.2012 / 06:31
2

su está disponível na maioria dos sistemas unix e deve funcionar:

su root -c 'echo "add this line to the code" >> fileName'
    
por 04.05.2012 / 07:30
1

Você pode usar tee com sudo :

echo "add this line to the code" | sudo tee -a filename > /dev/null
A saída de

echo é redirecionada com | ( pipe ) para sudo tee . tee lê a partir da entrada padrão e grava na saída padrão qualquer arquivo, neste caso filename . -a (ou --append ) torna tee anexado aos arquivos, sem que os arquivos sejam sobrescritos. Como tee é executado com sudo , ele abre arquivos com permissões de root. Finalmente, > /dev/null suprime a saída de tee para saída padrão .

Uma vantagem de usar tee em vez de apenas iniciar o comando inteiro incluindo o redirecionamento com su -c ou sudo sh -c é, que você não precisa alterar as cotações do comando inicial de nenhuma forma (citando linhas que já contêm as citações podem ficar bastante feias às vezes).

    
por 17.05.2014 / 16:02
0

Tente isso Este comando está disponível no Unix e no Linux.

sudo sh -c "echo 'add this line to the code' >> fileName"

    
por 29.11.2018 / 06:31
-2

Faria o truque:

ssh host "sudo su root -c 'echo "add this line to the code" >> /etc/hosts'"
    
por 14.05.2014 / 21:29