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


9

Estou tentando aprender scripts bash. Estou trabalhando em um problema prático e, a certa altura, preciso adicionar uma linha a um arquivo que requer rootpermissão para escrever.

O código fica assim:

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

É possível, de alguma maneira, fazer com que o script solicite a senha root, valide a senha e, na autenticação bem-sucedida, modifique o arquivo? O script deve retornar ao modo de usuário e continuar a execução do comando.

Respostas:


13

Há uma dica na sudopágina de manual 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ê precisará configurar seu usuário para ter sudoprivilégios. O shshell é usado devido ao redirecionamento para o arquivo de propriedade raiz. Eu também tive que escapar das aspas usadas para o echocomando.


2

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

su root -c 'echo "add this line to the code" >> fileName'

Ao contrário de sudo, as senhas não parecem ser armazenadas em cache su.
precisa

@ Ryne Everett: Eu não estou familiarizado com o sudo. Mas o comportamento de 'su' é realmente o necessário para o script do OP. Na maioria das vezes eu uso 'su' ao contrário: mudando da raiz para outro usuário. Nesse caso, nenhuma senha é necessária para todos.
miracle173

1

Você poderia usar teecom sudo:

echo "add this line to the code" | sudo tee -a filename > /dev/null

echoA saída de é redirecionada com |( canal ) para sudo tee. teelê da entrada padrão e grava na saída padrão qualquer arquivo, nesse caso filename. -a(ou --append) teeanexa aos arquivos, sem ele os arquivos seriam substituídos. Como teeé executado, sudoele abre arquivos com permissões de root. Finalmente, > /dev/nullsuprime teea saída para saída padrão .

Uma vantagem de usar, em teevez de apenas iniciar o comando inteiro, incluindo o redirecionamento com su -cor sudo sh -cis, é que você não precisa alterar a citação do comando inicial de nenhuma maneira (as linhas de citação que já contêm aspas podem ficar feias às vezes).


0

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

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


-2

Faria o truque:

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

Por que ssh? Você não precisa sucom sudoe nem você precisa especificar rootcomo é o padrão. Em suma, um pouco mais de explicações seria bom, pois o OP queria aprender algo e não apenas um problema resolvido.
Adaephon

Eu acho que você vai correr em problemas com vocês aspas
miracle173
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.