Ric*_*ard 6 bash shell command-line
我正在尝试运行以下命令:
$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql
Run Code Online (Sandbox Code Playgroud)
它产生了大量的错误输出,其中我只能在我的 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
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试将消息发送到文本文件:
$ psql -d template_postgis -f /usr/local/pgsql-9.1/share/contrib/postgis-2.0/postgis.sql > error.txt
Run Code Online (Sandbox Code Playgroud)
文本文件只包含三个命令:
SET
BEGIN
ROLLBACK
Run Code Online (Sandbox Code Playgroud)
那么为什么不是所有的输出都被发送到文本文件,我怎样才能看到所有的输出呢?
slh*_*hck 15
在 Unix(和其他)中,您通常要使用两个输出流,STDOUT 和 STDERR。两者都是标准流。
有了>
你只stdout重定向到一个文件中。
随着2>
您重定向错误输出到一个文件中(“2”,因为它的文件描述符为“2”)。
实际上,还有 STDIN,您可以使用<
. 此图显示了它们通常如何交互。
由于错误消息应始终打印到 STDERR(并且大多数程序都遵守这一点),因此请尝试将正常输出和错误输出分开:
command > normal.log 2> err.log
Run Code Online (Sandbox Code Playgroud)
同样,您可以将 STDERR 重定向到 STDOUT。
command 2>&1 > out.log
Run Code Online (Sandbox Code Playgroud)
简而言之,您还可以立即将所有内容重定向到一个文件中——至少对于大多数shell。但是不要依赖它来实现便携性。
command &> out.log
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11943 次 |
最近记录: |