Vraag Hoe gebruik je sudo met pijpleidingen? [duplicaat]


Mogelijke duplicaten:
sudo & redirect-uitvoer 

Laten we zeggen dat ik een regel in / etc / profile wil toevoegen. Ik probeer:

$ sudo echo "something" >> /etc/profile
bash: /etc/profile: Access forbidden

Natuurlijk zou ik kunnen schrijven:

$ sudo su
# echo "something" >> /etc/profile

en dit werkt, maar het werkt niet binnen een shellscript.

Wat is de juiste manier?


11
2017-12-15 14:09


oorsprong


imho, het is beter om het hele script als root uit te voeren in plaats van te hebben sudo opdrachten erin. - Pavel A


antwoorden:


Je kunt gebruiken tee:

$ echo "something" | sudo tee -a /etc/profile

Als u de. Weglaat -a (toevoegen) het bestand zal worden overschreven.


10
2017-12-15 14:37





Jouw versie:

sudo echo "something" >> /etc/profile

In dit commando, echo wordt uitgevoerd als root, maar de shell die wordt omgeleid echoDe uitvoer naar het root-bestand wordt nog steeds uitgevoerd als u. Dat is waarom je "Toegang verboden" krijgt

Werkende versie:

sudo bash -c 'echo "something" >> /etc/profile'

In dit commando gebruik je sudo om een ​​nieuwe shell te starten met root-privileges en geef dan die shell de hele command-string (inclusief de omleiding) met de -c optie van bash.


8
2017-12-15 14:14



Ok het werkt. Kun je me uitleggen waarom dit werkt, terwijl mijn opdracht niet werkt? - ororo
Gedaan. Ik hoop dat mijn uitleg voor jou begrijpelijk is. - Andy Friese
Makessens, bedankt! - ororo
@ororo Vergeet niet om dit als het geaccepteerde antwoord te markeren als het uw probleem heeft opgelost. - Dean