2016-06-17 4 views
1

ichMsys: wie STDERR auf dem Bildschirm und gleichzeitig kopieren sowohl STDOUT und STDERR, um Dateien zu halten

  • Anzeige STDERR auf dem Bildschirm
  • Copy STDOUT und STDERR der Lage sein möchte, in Dateien (und wenn möglich in der gleichen Datei)

Informationen, ich bin mit Msys, das zu tun.

.

Nach einigen Recherchen auf der SO zu tun, habe ich versucht, so etwas wie

<my command> > >(tee stdout.log) 2> >(tee stderr.log)

Bu zu verwenden, bekam ich folgende Fehlermeldung:

sh: syntax error near unexpected token `>'

.

Irgendeine Idee, wie man das macht?

Antwort

1

Es konnte keine direkte Lösung in Msys sein, aber die >(tee ...) Lösung funktioniert gut in * Nix, OSX, und wahrscheinlich Cygwin.

Die Problemumgehung besteht darin, alle Fehler und Warnungen zu erfassen, die wir auf dem Bildschirm anzeigen möchten.

Ich habe erfolgreich den folgenden Befehl für eine Make-Datei C-Code zu kompilieren:

make 2>&1 | tee make.log | grep -E "(([Ee]rror|warning|make):|In function|undefined)"

+0

Das ist eine gute Problemumgehung. Könnten Sie anstelle von 'grep -E 'STDERR verwenden, verwenden Sie' grep -v', um STDOUT auszuschließen und alles andere zu erhalten? Nun, das setzt voraus, dass Sie wissen, was der STDOUT ist, was nicht der Fall sein kann. –

+0

@ViniciusPlacco: Wenn Sie wissen, was in STDOUT wäre, können Sie definitiv 'grep -v' verwenden ...Punkt ist, ein Muster auf Fehler und Warnungen ist viel einfacher :) –

+0

Fair genug :) Gut, beide in der Tasche zu haben. Vielen Dank! –

1

Ich habe ein einfaches Skript (test.sh), die STDOUT und STDERR erzeugt:

#!/bin/bash 
echo hello 
rm something 
exit 

, was Sie ausführen möchten, mit folgendem zu tun Dann:

./test.sh > stdout.log 2> >(tee stderr.log >&2) 

Sie erhalten die STDERR auf dem Bildschirm und zwei getrennte Protokolldateien mit STDERR und STDOUT. Ich war Teil des here

Hinweis gegeben Antwort, die ich Sie gehe davon aus nicht über eine Datei something auf dem aktuellen Verzeichnis mit dem Namen :)

Wenn Sie Fehler- und Standardausgaben wollen die gleiche gehen Datei, verwenden Sie die Option -a auf tee:

./test.sh > std.log 2> >(tee -a std.log >&2) 
+0

Danke für die Antwort, obwohl es nicht auf MSys funktionieren könnte, aber nur auf Cygwin oder Shell. Wo rennst du dieses Shell Conmand? –

+0

Ich habe dies auf einem MAC OS-Terminal in 'bash' ausgeführt. Ich bin mir nicht sicher, ob ich auf MSYS laufen soll. –

+0

... funktioniert leider nicht in Msys, wie ich schon erwähnt habe. Funktioniert wahrscheinlich in Cygwin. –

Verwandte Themen