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

5

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 erros, dos quais eu só posso ver o final dentro do meu shell - eu 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?

    
por Richard 25.05.2012 / 16:33

1 resposta

14

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

Com > , você só 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 há STDIN, que você pode redirecionar com < . Este gráfico mostra como eles normalmente interagem.

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

command > normal.log 2> err.log

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

command 2>&1 > out.log

Como uma forma abreviada, você também pode redirecionar tudo para um arquivo imediatamente - pelo menos com os mais shells. Não confie nisso para portabilidade.

command &> out.log
    
por 25.05.2012 / 16:40