Alle Fehlermeldungen an eine Textdatei senden?

Alle Fehlermeldungen an eine Textdatei senden?

Ich versuche, den folgenden Befehl auszuführen:

$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql 

Es erzeugt eine große Menge an Fehlerausgaben, von denen ich in meiner Shell nur das Ende sehen kann – ich muss den Anfang sehen, um herauszufinden, was schief läuft.

... 
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6065: ERROR:  current transaction is aborted, commands ignored until end of transaction block
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6075: ERROR:  current transaction is aborted, commands ignored until end of transaction block
psql:/usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql:6081: ERROR:  current transaction is aborted, commands ignored until end of transaction block

Wenn ich jedoch versuche, die Nachrichten an eine Textdatei zu senden:

$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql > error.txt

Die Textdatei enthält nur drei Befehle:

SET
BEGIN
ROLLBACK

Warum wird nicht die gesamte Ausgabe an die Textdatei gesendet und wie kann ich die gesamte Ausgabe sehen?

Antwort1

Unter Unix (und anderen) gibt es normalerweise zwei Ausgabeströme, die Sie verwenden möchten, STDOUT und STDERR. Beide sindStandard-Streams.

Damit >leiten Sie STDOUT nur in eine Datei um.

Mit 2>leiten Sie STDERR zu einer Datei um (die „2“, weil ihr Dateideskriptor „2“ ist).


Eigentlich gibt es auch STDIN, mit dem Sie umleiten können <. DiesGrafikzeigt, wie sie normalerweise interagieren.

Diagramm

Da Fehlermeldungen immer in STDERR gedruckt werden sollten (und die meisten Programme respektieren das), versuchen Sie etwas in dieser Art, um die normale Ausgabe und die Fehlerausgabe zu trennen:

command > normal.log 2> err.log

Ebenso können Sie STDERR auf STDOUT umleiten.

command 2>&1 > out.log

Als Abkürzung könnte man auch gleich alles in eine Datei umleiten – zumindest mitam meistenShells. Verlassen Sie sich hinsichtlich der Portabilität jedoch nicht darauf.

command &> out.log

verwandte Informationen