Behebung des Permission Denied Fehlers beim Versuch, mit echo in eine Datei zu schreiben

English Deutsch

Problem:

Du versuchst, einen String mit echo in eine nur für root zugängliche Datei zu schreiben, z.B.:

sudo_echo_example.sh
sudo echo "foo" > /etc/my.cnf

aber du siehst nur diese Fehlermeldung:

sudo_echo_error.txt
-bash: /etc/my.cnf: Permission denied

Lösung

Verwende stattdessen tee (dies gibt den String auch auf stdout aus)

sudo_tee_example.sh
echo "foo" | sudo tee /etc/my.cfg # Überschreiben: Äquivalent zu echo "foo" > /etc/my.cnf
echo "foo" | sudo tee -a /etc/my.cfg # Anhängen: Äquivalent zu echo "foo" >> /etc/my.cnf

Der Grund für die Fehlermeldung ist, dass zwar echo mit sudo ausgeführt wird, aber >> /etc/my.cnf als normaler Benutzer (nicht root) ausgeführt wird.

Ein alternativer Ansatz ist, eine Sub-Shell als sudo auszuführen:

sudo_bash_subshell.sh
sudo bash -c 'echo "foo" > /etc/my.cnf'

aber dies hat mehrere Nachteile, z.B. im Zusammenhang mit Escaping, daher empfehle ich diesen Ansatz in der Regel nicht.


Check out similar posts by category: Linux