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