Klären Sie ein wenig, warum die Tee-Option vorzuziehen ist
Angenommen, Sie haben die entsprechende Berechtigung zum Ausführen des Befehls, mit dem die Ausgabe erstellt wird. Wenn Sie die Ausgabe Ihres Befehls an tee weiterleiten, müssen Sie nur die Berechtigungen von tee mit sudo erhöhen und tee direkt an die betreffende Datei schreiben (oder anhängen).
in dem Beispiel in der Frage würde das bedeuten:
ls -hal /root/ | sudo tee /root/test.out
für ein paar weitere praktische Beispiele:
# kill off one source of annoying advertisements
echo 127.0.0.1 ad.doubleclick.net | sudo tee -a /etc/hosts
# configure eth4 to come up on boot, set IP and netmask (centos 6.4)
echo -e "ONBOOT=\"YES\"\nIPADDR=10.42.84.168\nPREFIX=24" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth4
In jedem dieser Beispiele nehmen Sie die Ausgabe eines nicht privilegierten Befehls und schreiben in eine Datei, die normalerweise nur von root geschrieben werden kann. Dies ist der Ursprung Ihrer Frage.
Es ist eine gute Idee, dies auf diese Weise zu tun, da der Befehl, der die Ausgabe generiert, nicht mit erhöhten Berechtigungen ausgeführt wird. Es scheint hier keine Rolle zu spielen, echo
aber wenn der Quellbefehl ein Skript ist, dem Sie nicht vollständig vertrauen, ist es entscheidend.
Beachten Sie, dass Sie die Option -a verwenden können, um das Anhängen (Gefällt mir >>
) an die Zieldatei anzuhängen, anstatt sie zu überschreiben ( Gefällt mir >
).