Was ist eine einfache Methode Pipeeingabe in eine Datei auszugeben? (Linux)
Frage
Ich bin für einen kleinen Shell-Skript suchen, irgendetwas hinein geleitet nehmen, und Dump in eine Datei .. für E-Mail-Debugging-Zwecke. Irgendwelche Ideen?
Lösung
Der Unix-Befehl tee tut dies.
man tee
Andere Tipps
cat > FILENAME
Du bist nicht allein in etwas ähnlichem ... in der Tat brauchen, jemand, dass die Funktionalität schon vor Jahrzehnten und entwickelte wollte tee : -)
Natürlich können Sie stdout direkt auf eine Datei in einem beliebigen Shell mit dem Zeichen> umleiten:
echo "hello, world!" > the-file.txt
Die Standard-Unix-Tool-T kann dies tun. Er kopiert Eingang zum Ausgang, während auch in eine Datei zu protokollieren.
Mit Procmail. Procmail ist dein Freund. Procmail ist für diese Art der Sache gemacht.
Wenn Sie es im Skript analysieren mögen:
while /bin/true; do
read LINE
echo $LINE > $OUTPUT
done
Sie können aber einfach Katze verwenden. Wenn Katze etwas auf dem stdin bekommt, wird es an die stdout Echo, so dass Sie auf eine Pipe an cat> $ OUTPUT haben. Diese werden das gleiche tun. Das zweite Werk für binäre Daten auch.
Wenn Sie einen Shell-Skript, versuchen Sie dies:
#!/bin/sh
exec cat >/path/to/file
Wenn exim oder sendmail ist das, was in das Rohr schreibt, dann ist procmail eine gute Antwort, weil es gebe Sie Verriegelungs- / Serialisierung-Datei und Sie können sie alle in der gleichen Datei setzen.
Wenn Sie nur in eine Datei schreiben möchten, dann - T-Shirt> /tmp/log.$$ oder - cat> /tmp/log.$$ könnte gut genug sein.
Verwenden <<command>> | tee <<file>>
einen Befehl <<command>>
in eine Datei <<file>>
für Rohrleitungen.
Dies wird auch die Ausgabe zeigen.
Hä? Ich denke, ich habe nicht die Frage bekommen?
Sie können nicht nur die Pfeife in eine >> ~file
Ende
Zum Beispiel
echo "Foobar" >> /home/mo/dumpfile
wird anhängen Foobar zum dumpfile (und erstellen dumpfile falls erforderlich). Keine Notwendigkeit für ein Shell-Skript ... Ist das, was Sie suchen?
Wenn Sie kümmern sich nicht um das Ergebnis auszugeben
cat - > filename
oder
cat > filename