¿Enviar todos los mensajes de error a un archivo de texto?

¿Enviar todos los mensajes de error a un archivo de texto?

Estoy intentando ejecutar el siguiente comando:

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

Produce una gran cantidad de resultados de error, de los cuales solo puedo ver el final dentro de mi shell; necesito ver el comienzo para descubrir qué está yendo mal.

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

Sin embargo, si intento enviar los mensajes a un archivo de texto:

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

El archivo de texto solo contiene tres comandos:

SET
BEGIN
ROLLBACK

Entonces, ¿por qué no se envía todo el resultado al archivo de texto y cómo puedo verlo todo?

Respuesta1

En Unix (y otros), normalmente hay dos flujos de salida que desea utilizar, STDOUT y STDERR. Ambos sonflujos estándar.

Con >usted solo redirige STDOUT a un archivo.

Con 2>usted redirige STDERR a un archivo (el "2" porque su descriptor de archivo es "2").


En realidad, también existe STDIN, con el que puedes redirigir <. Estegráficomuestra cómo interactúan normalmente.

diagrama

Dado que los mensajes de error siempre deben imprimirse en STDERR (y la mayoría de los programas lo respetan), intente algo similar a esto para separar la salida normal y la salida de error:

command > normal.log 2> err.log

De manera similar, puedes redirigir STDERR a STDOUT.

command 2>&1 > out.log

En pocas palabras, también puedes redirigir todo a un archivo de inmediato, al menos conmayoríaconchas. Sin embargo, no confíe en esto para la portabilidad.

command &> out.log

información relacionada