Come aggiungere una riga a un file che ha solo l'autorizzazione di scrittura root e per continuare l'esecuzione dello script


9

Sto cercando di imparare lo scripting bash. Sto lavorando a un problema pratico e ad un certo punto devo aggiungere una riga a un file che richiede l' rootautorizzazione per scrivere.

Il codice è simile al seguente:

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

È possibile in qualche modo fare in modo che lo script richieda la password di root, convalidare la password e, in caso di autenticazione riuscita, modificare il file? Lo script dovrebbe quindi tornare alla modalità utente e continuare l'esecuzione del comando.

Risposte:


13

C'è un suggerimento nella sudopagina man che spiega come fare qualcosa del genere. Ecco il mio one-liner:

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

Ovviamente, dovrai prima impostare il tuo utente per avere i sudoprivilegi. La shshell viene utilizzata a causa del reindirizzamento al file di proprietà root. Ho anche dovuto sfuggire alle virgolette utilizzate per il echocomando.


2

su è disponibile sulla maggior parte dei sistemi unix e dovrebbe funzionare:

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

A differenza di sudo, le password non sembrano essere memorizzate nella cache su.
Ryne Everett,

@Ryne Everett: non ho familiarità con sudo. Ma il comportamento di "su" è in realtà quanto richiesto dalla sceneggiatura dell'OP. Il più delle volte uso "su" al contrario: passare da root a un altro utente. In questo caso non è necessaria alcuna password per tutti.
miracle173,

1

Puoi usare teecon sudo:

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

echoL'output viene reindirizzato con |( pipe ) su sudo tee. teelegge dallo standard input e scrive nello standard output qualsiasi dato file, in questo caso filename. -a(o --append) rende teeappend ai file, senza di esso i file verrebbero sovrascritti. Come teeviene eseguito sudo, apre i file con permessi di root. Infine, > /dev/nullelimina teel'output allo standard output .

Uno dei vantaggi dell'utilizzo teeinvece di avviare l'intero comando, incluso il reindirizzamento con su -co sudo sh -cè, è che non è necessario modificare in alcun modo la quotazione del comando iniziale (le linee di virgolette che già contengono virgolette a volte possono diventare piuttosto brutte).


0

Prova questo Questo comando è disponibile su Unix e Linux.

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


-2

Farebbe il trucco:

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

Perché ssh? Non è necessario sucon sudoné è necessario specificare rootin quanto è l'impostazione predefinita. Tutto sommato, un po 'più di spiegazioni sarebbero utili poiché l'OP voleva imparare qualcosa e non solo un problema risolto.
Adaephon,

Penso che incontrerai problemi con le doppie virgolette
miracle173
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.