我正在尝试运行以下命令:
$ 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