Angenommen, ich habe ein Zsh-Skript und möchte, dass es die Ausgabe druckt STDOUT
, aber auch die Ausgabe in eine Datei auf der Festplatte kopiert (ausgibt).
Darüber hinaus beginnt das Skript mit der folgenden Option
set -o xtrace
Dies zwingt es, ausführlich zu sein und zu drucken, welche Befehle es ausführt. Ich möchte diese Ausgabe auch in einer Datei auf der Festplatte erfassen.
Mein Verständnis ist, dass wenn ich es tue
./my_script.sh > log.txt
es sendet nur STDOUT
zu log.txt
, aber was , wenn ich auch in der Lage sein will, die Ausgabe im Terminal zu sehen?
Ich habe über tee
und die MULTIOS
Option in Zsh gelesen, bin mir aber nicht sicher, wie ich sie verwenden soll.
Wenn ich es tue:
./my_script | tee log.txt
Ich kann die Ausgabe auf dem Terminal sehen, aber die Datei log.txt
scheint nicht alles zu erfassen (tatsächlich erfasst sie kaum etwas).
quelle
./my_script.sh > log.txt 2>&1
script
Befehl suchen . Oder vielleichtmyscript >&1 > log.txt 2>&1
Antworten:
Es kann sein, dass Ihr Skript eine Ausgabe an
stdout
und erzeugtstderr
und Sie nur einen dieser Streams in Ihre Protokolldatei ausgeben../my_script.sh | tee log.txt
wird zwar alles an das Terminal ausgeben, aber nurstdout
in die Protokolldatei ausgeben ../my_script.sh > log.txt 2>&1
wird das Gegenteil tun, indem alles in die Protokolldatei kopiert wird, aber nichts auf dem Bildschirm angezeigt wird.Der Trick besteht darin, beide zu kombinieren mit
tee
:Dadurch wird
stderr
(2
) instdout
(1
) umgeleitet und dannstdout
in weitergeleitettee
, wodurch es in das Terminal und in die Protokolldatei kopiert wird .Das
zsh
Multios-Äquivalent wäre:Das heißt, leiten Sie stdout sowohl zum ursprünglichen stdout als auch zur log.txt um (intern über eine Pipe zu etwas, das funktioniert
tee
), und leiten Sie dann stderr auch zu diesem Pipe um (zur Pipe zum internentee
Prozess).quelle
./myscript.sh >&1 2>&1 > log.txt
? (dh die Reihenfolge der letzten beiden Umleitungen ändern). Würde es einen Unterschied zwischen ihnen geben?stdout
, nur auflog.txt
. Die letzte Zeile in der Antwort (hinzugefügt von @ StéphaneChazelas und nicht von mir) wird an beide ausgegeben.Mit nohup kann ein Job auch dann fortgesetzt werden, wenn die Konsole stirbt oder geschlossen ist. Dies ist nützlich für lange Sicherungen usw., aber hier verwenden wir die automatische Protokollierung.
quelle