有很多 shell 命令会丢弃旧输出。我见过的几个是 Nose 和 Hudson。我的意思是,当程序运行时,它会在 shell 中产生大量文本输出,但当你向上滚动时,你看不到旧输出,只能看到你使用的命令前你甚至输入了原始命令。
这让我很抓狂,因为重要的信息被吞噬了。我该如何让这些程序停止这种情况?
答案1
这类事情通常是程序直接操作终端并自行移动光标的结果。例如,vi 之类的编辑器就是这样做的 - 如果您在 vi 会话后尝试向后滚动 shell,您只会看到 vi 输出的最后一页中的文本,而不会看到您翻阅的其他任何内容。
处理此问题的方法:
- 使用类似 screen(1) 的工具并启用日志记录 (
ctrl-A H
)。然后您可以稍后查看日志。这可能会显示更多有用的信息。 - 尝试使用 tee(1) 来捕获输出
command | tee output.txt
- 确定如何禁用您正在运行的程序中的任何花哨的输出模式并强制它输出纯文本。
对于最后一个,您可以尝试以下几种方法。首先,查看命令的参数,看看是否有类似-nostty
或 的内容在谈论dumb terminals
。
您还可以尝试强制程序认为它是在哑终端上,如下所示:
TERM=dumb command
(假设是 bash shell)这可能会使程序认为它在哑终端上运行并导致它切换回直文本输出。
您还可以尝试向程序提供一些输入,这可能会触发它的简单文本输出模式:
echo blarg | command
或者可能
echo blargh | command -
如果程序将其-
作为从标准输入读取的指示。
无论如何,尝试这些想法,你应该找到某种方法从你正在使用的工具中获取直文本输出。
答案2
对我有用的方法是这样的:
my_command my_args >log 2>&1
将所有输出存储在名为 的文件中log
。
然后,在一个单独的 shell 窗口中,我执行以下操作:
tail -f log
显示正在my_command
写入的日志文件。