【问题标题】:Displaying stdout on screen and a file simultaneously在屏幕上同时显示标准输出和文件
【发布时间】:2013-10-16 22:33:27
【问题描述】:

我想将标准输出从我的脚本记录到文件中,但也让它在屏幕上显示给我以进行实时监控。该脚本每秒输出大约 10 次。

我尝试将标准输出重定向到一个文件,然后从另一个终端 tail -f 那个文件,但由于某种原因,tail 更新屏幕的速度明显慢于脚本写入文件的速度。

是什么导致了这种滞后?是否有另一种方法可以在我的终端和文件中获取一个标准输出流以供以后检查?

【问题讨论】:

    标签: bash shell unix scripting stdout


    【解决方案1】:

    你看到了多少滞后?几百字?几秒钟?分钟?几小时?

    您看到的是缓冲。几乎所有文件读取和写入都被缓冲。这包括输入和输出,并且在管道内也发生了一些缓冲。一次传递一个数据包而不是一个字节更有效。我相信 HFS+ 文件系统上的数据以 UTF-16 存储,而 Mac OS X 通常默认使用 UTF-8。 (NTFS 也使用 UTF-16 存储数据,而 Windows 默认使用代码页存储字符数据)。

    因此,如果您从另一个终端运行 tail -f,您可能会看到来自 tail 的缓冲,但是当您使用管道然后使用 tee 时,您可能在管道中和 @ 987654324@ 命令,这可能是您看到滞后的原因。

    顺便问一下,你怎么知道有一个滞后?你怎么知道你的程序写入磁盘的速度有多快?您是否在程序中打印出一些内容来帮助跟踪对文件的写入?

    在这种情况下,您可能不会像您想象的那样落后。文件写入也被缓冲。因此,延迟很可能不是来自tail -f,而是来自您的脚本写入到文件。

    【讨论】:

      【解决方案2】:

      我不能说为什么tail 滞后,但你可以使用tee

      Redirect output to multiple files, copies standard input to standard output and also to any files given as arguments. This is useful when you want not only to send some data down a pipe, but also to save a copy.

      示例:<command> | tee <outputFile>

      【讨论】:

      • 很酷的命令,我以前不知道。但在我的 Mac osx 机器上,它似乎比 tail -f 还要差。很奇怪....
      【解决方案3】:

      使用 tee 命令:

      tail -f /path/logFile | tee outfile
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多