Enviar todas as mensagens de erro para um arquivo de texto?

Enviar todas as mensagens de erro para um arquivo de texto?

Estou tentando executar o seguinte comando:

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

Ele produz uma grande quantidade de saída de erro, da qual só consigo ver o fim dentro do meu shell - preciso ver o começo para descobrir o que está errado.

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

No entanto, se eu tentar enviar as mensagens para um arquivo de texto:

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

O arquivo de texto contém apenas três comandos:

SET
BEGIN
ROLLBACK

Então, por que toda a saída não está sendo enviada para o arquivo de texto e como posso ver toda a saída?

Responder1

No Unix (e outros), normalmente existem dois fluxos de saída que você deseja usar, STDOUT e STDERR. Ambos sãofluxos padrão.

Com >você apenas redireciona STDOUT para um arquivo.

Com 2>você redireciona STDERR para um arquivo (o "2" porque seu descritor de arquivo é "2").


Na verdade, também existe o STDIN, com o qual você pode redirecionar <. Essegráficomostra como eles normalmente interagem.

diagrama

Como as mensagens de erro sempre devem ser impressas em STDERR (e a maioria dos programas respeita isso), tente algo assim para separar a saída normal da saída de erro:

command > normal.log 2> err.log

Da mesma forma, você pode redirecionar STDERR para STDOUT.

command 2>&1 > out.log

Resumindo, você também pode redirecionar tudo para um arquivo imediatamente – pelo menos commaioriacartuchos. Não confie nisso para portabilidade.

command &> out.log

informação relacionada