将所有错误消息发送到文本文件?

将所有错误消息发送到文本文件?

我正在尝试运行以下命令:

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

它产生了大量错误输出,我只能在我的 shell 中看到结尾——我需要看到开头才能弄清楚出了什么问题。

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

但是,如果我尝试将消息发送到文本文件:

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

该文本文件仅包含三个命令:

SET
BEGIN
ROLLBACK

那么为什么不将所有输出都发送到文本文件?我如何才能看到所有输出?

答案1

在 Unix(和其他系统)中,通常有两个输出流需要使用,STDOUT 和 STDERR。两者都是标准流

>您只需将 STDOUT 重定向到文件即可。

2>STDERR 重定向到一个文件(“2”,因为其文件描述符是“2”)。


实际上,还有 STDIN,你可以使用它来重定向<。这形象的展示它们通常如何互动。

图表

由于错误消息应始终打印到 STDERR(并且大多数程序都遵守这一点),因此请尝试以下方法来分离正常输出和错误输出:

command > normal.log 2> err.log

类似地,您可以将 STDERR 重定向到 STDOUT。

command 2>&1 > out.log

作为一种简便方法,您也可以立即将所有内容重定向到一个文件中 - 至少使用最多shell。但是不要依赖它来实现可移植性。

command &> out.log

相关内容