替代 | more 逐页显示错误结果

替代 | more 逐页显示错误结果

命令

psql -d template_postgis2 -f /usr/share/postgresql/9.1/contrib/postgis-2.1/postgis.sql

返回错误列表,该列表太长,无法通过滚动到错误的开头来显示。

我尝试了相同的命令,但在命令末尾添加了“ | more”和“ ”,但它并没有像应该的那样逐页显示消息。| less

我也尝试将输出放入带有“ > file.txt”的文件中,但我没有在这个新文件中得到屏幕上显示的内容!!

我不明白为什么。我想我不能用 psql 命令来做到这一点?还有其他方法可以获取所有错误消息吗?

感谢您的帮助!

答案1

大多数程序打印的错误都发送到stderr(标准错误)流,而程序的输出则发送到stdout(标准输出)流。

每个流都有一个文件描述符,您可以将其视为标识流的数字。stderr具有文件描述符 2,并且的值为stdout1。

  • 当你跑步时
    命令>文件.txt

          这相当于跑步,

    命令 1> 文件.txt

          这有一个含义——将内容重定向stdout到文件file.txt

  • 然而,如果您只想重定向内容stderr,您可以写:
    命令 2> 文件.txt
  • 要重定向stdoutstderr,您可以这样写:
    命令 &> 文件.txt

                 或者

    命令 > 文件.txt 2>&1

            您可以将第二条命令解释为 -command将的输出发送到file.txt,并与之stderr合并stdout

  • 同样,对于向less或发送错误more,首先合并stderrstdout,然后将其发送到相应的程序。
    命令 2>&1 | less

答案2

如果您尝试将 STDERR 输出捕获到 more/less 或直接发送到文件,则需要告诉它这样做。只需使用 | 或 > 即可仅抓取 STDOUT,而不会抓取 STDERR。要抓取两者,您需要执行以下操作:

psql -d ... 2>1 | less

这会将 STDERR 重定向到 STDOUT,然后当您尝试翻阅输出时,两者都应该出现在 less 中。

答案3

我认为 dobey 和 green7 可以更好地回答您的特定问题,但是为了完整性:

我可能会收到意想不到的错误或消息,并且不想再次运行该命令,或者不想花时间。因此,每当我安装新操作系统时,我都会启动 gnome-terminal,转到编辑->首选项->滚动选项卡,然后单击无限滚动复选框。

当使用内核虚拟控制台时,您可以使用 Shift-PageUp 向后滚动。

当使用 less|more 或者都不使用时,如果我将终端屏幕水平加宽到足够大以容纳大部分消息以消除行折叠,我有时会发现更容易理解消息。

相关内容