Wie leite ich die Standardausgabe in mehrere Protokolldateien um? Folgendes funktioniert nicht:
some_command 1> output_log_1 output_log_2 2>&1
linux
io-redirection
tee
Doppeldecker
quelle
quelle
zsh
können Sie verwendensome_command >output_log_1 >output_log_2
.Antworten:
Siehe
man tee
:Entsprechend:
quelle
cmd 2>&1 | tee log1 log2
ich habe versucht, wie oben ausgeführt, aber ich muss Strg-C drücken, um es in die zweite Protokolldatei umzuleiten. Auch die Ausgabe wird auf der Konsole gedruckt. Ich möchte, dass die Befehlsausgabe in die Protokolle umgeleitet wird, aber nicht in die Konsole. Jede Hilfe wird gebeten.tee
Befehl schreibtstdin
in Datei (en) und auch instdout
. Wenn Sie nicht möchten, dass die Ausgabe auf dem Terminal angezeigt wird, müssen Sie sie wie gewohnt umleiten/dev/null
.echo test | tee --append file1 file2
Angenommen, Ihre Ausgabe wird aus einer Funktion generiert
cmd()
:Um die Ausgabe von
cmd
in zwei Dateien, aber nicht in die Konsole umzuleiten , können Sie Folgendes verwenden:Dies funktioniert für mehrere Dateien, vorausgesetzt, alle Datenquellen werden an tee weitergeleitet:
Dies wird auch funktionieren:
Ohne die
/dev/null
Umleitung sendet tee zusätzlich zu den angegebenen Dateien eine Ausgabe an stdout .Wenn dies beispielsweise über die Konsole ausgeführt wird, wird die Ausgabe dort angezeigt. Auf einer Crontab ausgeführt, wird in der Ausgabe die Statusmeldung angezeigt, die an Sie gesendet wurde (siehe auch Gilles 'Antwort hier https://unix.stackexchange.com/a/100833/3998 ).
Dies funktionierte für mich in Bash auf Ubuntu 12.04 und wurde in Ubuntu 14.04 mit GNU Bash 4.3.11 (1) verifiziert, so dass es auf jeder aktuellen GNU Bash-Version funktionieren sollte.
quelle
version 4.3.11(1)-release (i686-pc-linux-gnu)
) in Ubuntu 14.04 getestet habe .Es ist ein alter Beitrag, aber ich habe ihn gerade gefunden ...
Anstatt die Ausgabe an
> /dev/null
umzuleiten, können Sie sie an die letzte Datei umleiten:Oder zum Anhängen der Ausgabe:
quelle
-a
in Abschlag)Wie @jofel in einem Kommentar unter der Antwort erwähnt hat, kann dies nativ erfolgen in
zsh
:oder mit Klammererweiterung:
Intern funktioniert dies sehr ähnlich zu den oben angegebenen
tee
Antworten. Die Shell verbindet die Standardausgabe des Befehls mit einem Prozess, der an mehrere Dateien weiterleitet. Daher gibt es keinen zwingenden technischen Vorteil, wenn man es so macht (aber es sieht wirklich gut aus). Weitere Informationen finden Sie imzsh
Handbuch .quelle
Ein anderer Ausdruck ist jedoch nicht möglich
Könnte vereinfacht werden, wenn es um viele Dateien geht.
quelle
file1
Durchgangfile8
als Namen wollen und dies wahrscheinlich nur beispielhafte Platzhalter für die Namen der Dateien sind