
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.
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