处理抛弃旧输出的shell命令

有一堆的shell命令会抛弃旧的输出。 我见过的一对是“鼻子”和哈德森。 我的意思是,当程序运行时,它会在shell中产生大量的文本输出,但是当你向上滚动时,你不能看到旧的输出,只能看到你input原始命令之前使用的命令。

这让我疯狂,因为重要的信息正在被吞噬。 我如何让这些程序停止这样做?

这种事情通常是一个程序的结果,它直接操纵terminal,并将光标自行移动。 例如,这就是像vi这样的编辑器 – 如果在vi会话之后尝试向外滚动shell,则只能看到vi输出的最后一页中的文本,而不是其他页面中的文本。

处理这个问题的方法:

  • 使用屏幕(1)和启用logging( ctrl-A H )的工具。 然后您可以稍后查看日志。 这可能会显示更有用的信息。
  • 尝试使用tee(1)捕获输出,如同command | tee output.txt command | tee output.txt
  • 确定如何在正在运行的程序中禁用任何奇特的输出模式,并强制它吐出纯文本。

对于最后一个,你可以尝试一些事情。 首先,看看命令的参数,看看是否有什么东西或者什么都不在谈论dumb terminals

你也可以尝试迫使程序认为它是在这样一个愚蠢的terminal:

 TERM=dumb command 

(假设bash shell),这可能会使程序认为它运行在一个哑terminal,并导致它切换回直接的文本输出。

您也可以尝试为程序提供一些input,并可能触发简单的文本输出模式:

 echo blarg | command 

或者可能

 echo blargh | command - 

如果程序需要-作为从stdin读取的指示。

无论如何,试验这些想法,你应该find一些方法来从你正在使用的工具获得直接的文本输出。

为我工作的方法是这样做的:

 my_command my_args >log 2>&1 

其中将所有输出存储在称为log的文件中。

然后,在一个单独的shell窗口中,我这样做:

 tail -f log 

其中显示日志文件为my_command正在写入。